笔记
模组加载器现已集成到游戏中,因此不再需要该项目。对于包含新/不同功能代码的“官方”版本,请参阅以下 fowkr https://github.com/jakobharder/anno1800-mod-loader
《纪元 1800》唯一的模组加载器,支持加载解压的 RDA 文件、XML 自动合并和基于 DLL 的模组。
没有文件大小限制。不再需要重新包装。更新后不太可能中断(一般来说,mod 在每次更新后应该继续工作,YMMV)。
这会使用 XPath 更改游戏 XML 文件,这样就可以轻松且可能地只对您绝对需要的 mod 进行更改,而不用处理兆字节的 XML 文件。
简短的视频展示了安装加载程序是多么容易。
模组必须单独安装。
前往发布页面并下载最新版本的 loader.zip。
将内容解压到Anno1800.exe所在位置
Uplay默认路径为
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800BinWin64
系统会要求您覆盖 python35.dll,只需接受即可。
您可能还需要 VS 2019 Redist https://aka.ms/vs/16/release/VC_redist.x64.exe
基本上就是这样。
模组将始终按字母顺序加载。 Mod 可以从以下位置加载:
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800mods
假设默认 Uplay 路径。这取决于您安装《纪元 1800》时选择的位置mods
文件夹)。您可以使用Win + R并输入shell:PersonalAnno 1800
来访问它文档中的
mods
优先于游戏安装目录,这意味着如果文档位置中有mods
文件夹,则 mods 将不再从游戏目录加载。
对于更有经验的用户,将遵循使用
mklink
创建的符号链接(从而以更简单的方式管理不同的 mod 存储库)。
下面给出了使用 mod 加载器创建 mod 的简短介绍。有关缩放扩展模式的示例,请参阅examples
目录。
在以前的纪元游戏中,有一种方法可以告诉游戏从磁盘加载提取的文件而不是加载它们
来自 RDA 容器。虽然这使事情变得更容易,但它仍然不是处理修改大型 XML 文件的好方法。
这款 Anno 1800 mod 加载器支持一些简单的“命令”,可以轻松修补 XML,以实现几乎任何您想要的功能。
步骤 1)在 Anno 1800/mods 中为您的 mod 设置一个目录。在以下步骤中,假设您的目录标题为“myMod”
步骤 2)在 myMod 内部,您重新创建基础游戏使用的确切文件结构。修补后的 asset.xml 文件必须位于以下路径下: Anno 1800/mods/myMod/data/config/export/main/asset/assets.xml
步骤 3)您的 XML 文档应具有以下结构:
< ModOps >
< ModOp >
<!-- Whatever Change you want to do -->
</ ModOp >
</ ModOps >
您可以根据需要提供任意数量的
<ModOp>
,并在单个 mod 中为不同的原始补丁文件提供多个补丁文件。
步骤 1)使用 Path 参数查找并选择要使用 XPath 编辑的 XML 节点。
例子:
< ModOp Path = " /Templates/Group[Name = 'Objects']/Template[Name = 'Residence7']/Properties " >
对于资产文件,您还可以使用 GUID 参数。这会选择具有给定 GUID 的资产的所有子节点作为 xPath 的新根,以获得更清晰的代码,并且速度更快,性能更佳。
例子:
Standard way: < ModOp Path = " //Asset[Values/Standard/GUID = '1137']/Values/Standard/Name " >
Better, with GUID arg: < ModOp GUID = ' 1337 ' Path = " /Values/Standard/Name " >
步骤 2)指定 ModOp 的类型,以更改所选节点。
目前支持的类型:
- Merge Replaces all given child nodes or Arguments
- Remove Removes the selected Node
- Add Adds inside the selected Node
- Replace Replaces the selected Node
- AddNextSibling Adds a sibling directly after the selected node
- AddPrevSibling Adds a sibling directly in front of the selected node
这只是一个快速的初始实现(~3 小时),对于如何改进或做一些完全不同的事情的讨论非常开放
步骤 3)添加您想要在 ModOp 中添加、合并或替换的 XML 代码。例子:
< ModOp Type = " replace " GUID = ' 1337 ' Path = " /Values/Standard/Name " >
< Name >ThisIsATestNameForGUID1337</ Name >
</ ModOp >
此 ModOp 会将 GUID 1337 的资产的 /Values/Standard/Name 下的节点替换为:“
<Name>ThisIsATestNameForGUID1337</Name>
”
您可以使用Include
指令将 XML 补丁拆分为多个文件。
< ModOps >
<!-- ModOps applied before the include -->
< Include File = " even-more-modops.include.xml " />
<!-- ModOps applied after the include -->
</ ModOps >
File
采用相对于执行包含操作的 XML 文件的文件路径。
游戏中没有对应项的 XML 文件通常是错误,并会导致日志中出现错误。使用扩展名*.include.xml
可以防止这种情况发生。
否则,包含的 XML 补丁的处理方式与普通 XML 补丁相同。支持嵌套包含。
将其放入包含游戏路径的 mod 文件夹中,以便位于mods/new-zoom-level/data/config/game/camera.xml
中
默认 uPlay 安装中的 mods 文件夹必须位于
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800mods
< ModOp Type = " add " Path = " /Normal/Presets " >
< Preset ID = " 15 " Height = " 140 " Pitch = " 0.875 " MinPitch = " -0.375 " MaxPitch = " 1.40 " Fov = " 0.56 " />
</ ModOp >
< ModOp Type = " merge " Path = " /Normal/Settings " >
< Settings MaxZoomPreset = " 15 " ></ Settings >
</ ModOp >
您可以在examples
目录中找到更多示例。
调试将是不可能的,游戏使用的是 Denuvo 和 VMProtect,我有自己的工具可以让我调试它,但我不会公开分享这些工具。
您可以在
Anno 1800/logs/mod-loader.log
中阅读 printf 又名调试日志,了解由丢失节点、错误路径或无法识别的节点测试引起的任何错误
要测试您编写的“补丁”对原始游戏文件的作用,您还可以使用xml-test
,它将模拟游戏将加载的内容。
xml-test game_camera.xml patch.xml
这使用 patch.xml 修补 game_camera.xml 并将结果作为 patched.xml 文件写入当前目录中
原始空白应该几乎相同,因此您可以使用一些 diff 工具来查看到底发生了什么变化。
其他文件类型显然无法“合并”,因此我们只需加载具有该文件的最后一个 mod 的版本。 (模组按字母顺序加载)。对于资源,强烈建议使用 Anno 1800/data 文件夹。
您需要 Bazel、Visual Studio 2022,就这些了。
您可以查看azure-pipelines.yml
并了解它是如何完成的。
成功的简单步骤:
set BAZEL_VC=C:Program Files (x86)Microsoft Visual Studio2022BuildToolsVC
bazel build //libs/python35:python35.dll
构建 .dll如果您想开发 XML 操作的新功能,可以使用 xmltest 进行测试。因为它使用与实际文件加载器相同的代码。