Duckov Market Mod

February 18, 2026 · View on GitHub

Duckov 联机市场 Mod 源码仓库,包含 CoreLoader 两个项目。
本仓库源码由作者通过逆向并进行二次开发得到,已对逆向出来的阅读性差的变量名、方法名进行语义化处理,并且完善了前后端,可直接使用。
只保留 Mod 相关内容,已经过脱敏处理,可用于二次开发与协作。

1. 项目结构

Duckov_marketmod/
├─ duckmarket_core/                 # 主功能模块(UI、网络、Patch、配置)
├─ duckmarket_loader/               # 加载器(版本检查、下载、校验、加载 Core)
├─ mod_assets/
│  ├─ info.ini.example              # Mod 基础配置示例
│  └─ version/1.2.7/                # 版本目录(当前基线)
├─ DuckMarket_Config.json.example   # 运行配置示例
├─ DuckNewMarket.sln                # 解决方案(Core + Loader)
└─ README.md

2. 版本与目录约束

  • 当前基线版本为 1.2.7
  • 运行时核心 DLL 应放在:version/1.2.7/
  • info.ini 里的以下字段约束:
    • name=DuckNewMarket.Loader 必须保持不变。
    • displayName=... 可以自定义。

3. 环境要求

3.1 必需软件

  • Windows 10/11
  • PowerShell 5+
  • .NET SDK 8 或更高(建议 10)
  • 已安装 Escape from Duckov

3.2 必需依赖文件

编译需要能访问以下 DLL:

  • 游戏 Managed 目录(Duckov_Data\Managed)下的一系列 Unity/游戏 DLL。
  • 0Harmony.dll(通常来自 workshop 模组目录)。

4. 准备本地路径

请先确定以下两个路径(示例仅作参考):

  • DuckovManagedDir 示例:D:\steam\steamapps\common\Escape from Duckov\Duckov_Data\Managed
  • HarmonyDll 示例:D:\steam\steamapps\workshop\content\3167020\3591763519\version\1.2.7\0Harmony.dll

可先用下面命令检查路径是否存在:

Test-Path "D:\steam\steamapps\common\Escape from Duckov\Duckov_Data\Managed"
Test-Path "D:\steam\steamapps\workshop\content\3167020\3591763519\version\1.2.7\0Harmony.dll"

返回 True 才能继续。

5. 配置编译参数(详细)

项目已移除硬编码本机路径,必须通过环境变量或 dotnet build 参数传入。

5.1 推荐方式:环境变量

$env:DUCKOV_MANAGED_DIR = "D:\steam\steamapps\common\Escape from Duckov\Duckov_Data\Managed"
$env:HARMONY_DLL = "D:\steam\steamapps\workshop\content\3167020\3591763519\version\1.2.7\0Harmony.dll"
$env:NEWTONSOFT_JSON_DLL = "$env:DUCKOV_MANAGED_DIR\Newtonsoft.Json.dll"

5.2 备选方式:构建参数

dotnet build .\duckmarket_core\DuckMarket.Core.csproj -c Release `
  /p:DuckovManagedDir="D:\...\Duckov_Data\Managed" `
  /p:HarmonyDll="D:\...\0Harmony.dll"

dotnet build .\duckmarket_loader\DuckMarket.Loader.csproj -c Release `
  /p:DuckovManagedDir="D:\...\Duckov_Data\Managed"

6. 编译步骤(从零开始)

在仓库根目录执行:

dotnet restore .\DuckNewMarket.sln
dotnet build .\duckmarket_core\DuckMarket.Core.csproj -c Release
dotnet build .\duckmarket_loader\DuckMarket.Loader.csproj -c Release

编译成功后关键输出:

  • duckmarket_core\bin\Release\netstandard2.1\DuckNewMarket.Core.dll
  • duckmarket_loader\bin\Release\netstandard2.1\DuckNewMarket.Loader.dll

7. 组装本地 Mod 目录(详细)

以下用 <GameRoot> 代表你的游戏目录,例如:D:\steam\steamapps\common\Escape from Duckov

7.1 创建目标目录

$modRoot = "<GameRoot>\Duckov_Data\Mods\DuckovNewMarket"
$coreDir = Join-Path $modRoot "version\1.2.7"
New-Item -ItemType Directory -Force -Path $modRoot | Out-Null
New-Item -ItemType Directory -Force -Path $coreDir | Out-Null

7.2 复制编译产物

Copy-Item .\duckmarket_loader\bin\Release\netstandard2.1\DuckNewMarket.Loader.dll $modRoot -Force
Copy-Item .\duckmarket_core\bin\Release\netstandard2.1\DuckNewMarket.Core.dll $coreDir -Force

7.3 生成 info.ini

Copy-Item .\mod_assets\info.ini.example (Join-Path $modRoot "info.ini") -Force

然后编辑 info.ini,确认:

  • name 必须是 DuckNewMarket.Loader
  • displayName 可自定义显示名
  • version 保持 1.2.7

8. 配置运行参数(DuckMarket_Config.json)

将示例文件复制到 Mod 根目录并改为真实地址:

Copy-Item .\DuckMarket_Config.json.example "<GameRoot>\Duckov_Data\Mods\DuckovNewMarket\DuckMarket_Config.json" -Force

关键字段说明:

  • ApiBaseUrl: HTTP API 根地址(示例:https://api.example.com/api/v1
  • WsBaseUrl: WebSocket 根地址(示例:wss://api.example.com/api/v1
  • VersionsBaseUrl: 版本接口地址(示例:https://api.example.com/api/v1/versions
  • AllowInsecureTlsForLoader: 是否忽略 TLS 证书错误(生产环境建议 false
  • SteamWebApiIdentity: Steam 身份标识(按后端约定)

9. 启动验证(详细)

9.1 启动前检查

  • 完全退出游戏后再覆盖 DLL(进程占用会导致复制失败)。
  • 确认目标目录已包含:
    • DuckNewMarket.Loader.dll
    • version\1.2.7\DuckNewMarket.Core.dll
    • info.ini
    • DuckMarket_Config.json

9.2 启动后看日志

日志位置通常为:

C:\Users\<你的用户名>\AppData\LocalLow\TeamSoda\Duckov\Player.log

可用命令快速筛选:

Select-String -Path "$env:USERPROFILE\AppData\LocalLow\TeamSoda\Duckov\Player.log" -Pattern "Duck Market Mod Loader Awake","Version Check","Loading mod dll at path"

若能看到加载与版本检查相关日志,说明链路基本正常。

10. 常见问题与处理

10.1 编译时报找不到 UnityEngine 或 TeamSoda DLL

  • 原因:DUCKOV_MANAGED_DIR 未设置或路径错误。
  • 处理:重新设置变量并确认 Test-PathTrue

10.2 编译时报找不到 0Harmony.dll

  • 原因:HARMONY_DLL 未设置或版本目录不对。
  • 处理:确认 HARMONY_DLL 指向真实文件。

10.3 游戏不加载新 DLL

  • 原因:游戏进程占用旧文件、复制失败或目录层级错误。
  • 处理:完全退出游戏后重拷贝;检查 DLL 是否在准确目录。

10.4 能加载但无法连接后端

  • 原因:DuckMarket_Config.json 中 API/WS 地址不正确,或证书问题。
  • 处理:校验 ApiBaseUrl/WsBaseUrl/VersionsBaseUrl;开发环境临时开启 AllowInsecureTlsForLoader=true 进行定位(生产请关闭)。

11. 开发迭代建议流程

  1. 修改 duckmarket_coreduckmarket_loader 源码。
  2. 执行编译命令。
  3. 复制 DLL 到 Mod 目录。
  4. 启动游戏并查看 Player.log
  5. 确认功能后再提交代码。

12. 安全与脱敏规则

  • 禁止提交真实密码、Token、私有证书、SSH 凭据。
  • 禁止提交本机绝对路径或个人环境说明。
  • DuckMarket_Config.json 属于本地运行配置,不应包含生产敏感信息。

13. License

本项目使用 MIT License,详见仓库根目录 LICENSE