筆記
模組載入器現在已整合到遊戲中,因此不再需要該項目。對於包含新/不同功能代碼的「官方」版本,請參閱以下 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 進行測試。因為它使用與實際文件載入器相同的程式碼。