“How settlements work”的版本间的差异
小 (→距离缓存相关) |
(→如何覆盖游戏默认定居点) |
||
第13行: | 第13行: | ||
== 如何覆盖游戏默认定居点 == | == 如何覆盖游戏默认定居点 == | ||
+ | <big>当创建mod时你可以复写 SandBox 模组中的定义,但在文件中append(添加)内容是不可能的,所以如果要做更改就要一次性修改所有文件。</big><br> | ||
+ | <br> | ||
+ | <big>首先将 '''Modules/SandBox/ModuleData/settlements.xml''' 复制到 '''Modules/你的模组名/ModuleData/settlements.xml''' ,并且把 '''Modules/SandBox/SceneObj/Main_map''' (一个文件夹)复制到 '''Modules/你的模组名/SceneObj/Main_map'''。</big><br> | ||
+ | <big>如果可能的话,请避免用记事本这类普通编辑器对文件进行编辑,而是使用像 Notepad++ 这类更强大的编辑器。</big><br> | ||
+ | <br> | ||
+ | <big>在 Modules/你的模组名/submodule.xml 添加以下这个 XmlNode:</big> | ||
+ | <nowiki> | ||
+ | <XmlNode> | ||
+ | <XmlName id="Settlements" path="settlements"/> | ||
+ | <IncludeGameTypes> | ||
+ | <GameType value = "Campaign"/> | ||
+ | <GameType value = "CampaignStoryMode"/> | ||
+ | </IncludeGameTypes> | ||
+ | </XmlNode> | ||
+ | </nowiki> | ||
+ | <big>Main_map 会被自动加载。</big><br> | ||
+ | <br> |
2020年4月23日 (四) 22:53的版本
定居点工作机制
本游戏添加定居点的机制就是结合两个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 会被自动加载。