笔记
模组加载器现已集成到游戏中,因此不再需要该项目。对于包含新/不同功能代码的“官方”版本,请参阅以下 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 Studio2022BuildToolsVCbazel build //libs/python35:python35.dll构建 .dll如果您想开发 XML 操作的新功能,可以使用 xmltest 进行测试。因为它使用与实际文件加载器相同的代码。