DLL 类 MOD 是七日杀最强大的 MOD 形式,通过 C# 编写动态链接库实现 XML 无法做到的功能。这篇文章带你从零开始,完成第一个 DLL MOD。
什么是 DLL MOD
DLL MOD 通过 C# 代码直接调用七日杀的游戏 API,可以实现:
- 自定义 UI 界面
- 复杂的游戏逻辑修改
- NPC AI 行为定制
- 自定义武器/技能效果
- 服务器专用功能
相比 XML MOD,DLL MOD 功能更强但门槛也更高,需要基础的 C# 编程知识。
开发环境搭建
必需工具
| 工具 | 用途 | 下载 |
|---|---|---|
| Visual Studio 2022 | IDE 编辑器 | visualstudio.microsoft.com |
| .NET Framework 4.7.2 | 运行时 | Windows 自带 |
| Assembly-CSharp.dll | 游戏核心库 | 七日杀安装目录 |
项目创建
- 打开 Visual Studio,创建新项目
- 选择 类库 (.NET Framework) 模板
- 目标框架选择 .NET Framework 4.7.2
- 添加引用:指向七日杀目录下的
7DaysToDie_Data/Managed/Assembly-CSharp.dll
引用库说明
| 库名 | 作用 |
|---|---|
| Assembly-CSharp.dll | 七日杀核心游戏逻辑 |
| UnityEngine.dll | Unity 引擎核心 |
| UnityEngine.UI.dll | Unity UI 系统 |
| UnityEngine.CoreModule.dll | Unity 核心模块 |
MOD 基础结构
Mods/my-dll-mod/
├── ModInfo.xml
├── Config/
│ └── ... (XML配置文件,可选)
└── bin/
└── Release/
└── my-dll-mod.dll ← 编译输出
ModInfo.xml
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<ModInfo>
<Name>我的DLL MOD</Name>
<Description>第一个DLL MOD</Description>
<Author>KK</Author>
<Version>1.0.0</Version>
</ModInfo>
</xml>第一个 DLL MOD:实体扫描器
这个 MOD 实现扫描周围实体并显示信息的功能。
代码实现
using UnityEngine;
using HarmonyLib;
public class EntityScannerMod
{
// Harmony 补丁:在游戏 Update 中注入扫描逻辑
[HarmonyPatch(typeof(XUi))]
[HarmonyPatch("Update")]
public class XUiUpdatePatch
{
static float lastScanTime = 0f;
static float scanInterval = 2f; // 每2秒扫描一次
static void Postfix(XUi __instance)
{
if (Time.time - lastScanTime < scanInterval) return;
lastScanTime = Time.time;
// 获取本地玩家
EntityPlayerLocal player = __instance.xui.playerUI.entityPlayer;
if (player == null) return;
// 扫描周围10格内的实体
Vector3 playerPos = player.position;
float scanRadius = 10f;
// 使用游戏API获取实体列表
var entities = GameManager.Instance.World.GetEntitiesInBounds(
typeof(Entity),
new Bounds(playerPos, Vector3.one * scanRadius * 2)
);
int entityCount = 0;
foreach (var entity in entities)
{
if (entity is EntityAlive alive && alive != player)
{
entityCount++;
float distance = Vector3.Distance(playerPos, alive.position);
// 可以在这里添加自定义逻辑
}
}
}
}
}Harmony 补丁基础
七日杀使用 Harmony 库进行方法补丁。常用补丁类型:
// 前置补丁:在原方法执行前运行
[HarmonyPatch(typeof(ClassName))]
[HarmonyPatch("MethodName")]
[HarmonyPrefix]
static bool Prefix() { return true; } // 返回 false 则跳过原方法
// 后置补丁:在原方法执行后运行
[HarmonyPatch(typeof(ClassName))]
[HarmonyPatch("MethodName")]
[HarmonyPostfix]
static void Postfix() { }
// 转译补丁:替换原方法的 IL 代码
[HarmonyPatch(typeof(ClassName))]
[HarmonyPatch("MethodName")]
[HarmonyTranspiler]
static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { }编译与调试
编译步骤
- 在 Visual Studio 中选择 Release 配置
- 生成解决方案(Ctrl+Shift+B)
- 复制
bin/Release/my-dll-mod.dll到 MOD 目录
调试方法
- 日志输出:使用
Debug.Log()输出到游戏日志 - 控制台命令:注册自定义控制台命令用于测试
- 断点调试:附加到游戏进程进行断点调试(高级)
// 日志输出
Debug.Log("[我的MOD] 扫描完成,发现 " + entityCount + " 个实体");
// 控制台命令注册
public class MyConsoleCommand : IConsoleCommand
{
public string GetDescription() => "测试命令";
public string[] GetCommands() => new[] { "testcmd" };
public void Execute(string[] _params, int _minParams)
{
SdtdConsole.Instance.Output("命令执行成功!");
}
}常见问题
DLL 加载失败
- 检查 .NET Framework 版本是否匹配
- 确认引用的 Assembly-CSharp.dll 版本与游戏版本一致
- 查看日志文件中的错误信息
Harmony 补丁冲突
- 多个 MOD 修改同一方法时可能冲突
- 使用
Harmony.PatchAll()的顺序可能影响结果 - 建议在 ModInfo.xml 中声明依赖关系
游戏更新后 MOD 失效
- 游戏更新可能修改 API,导致 DLL 编译失败
- 需要更新引用的 Assembly-CSharp.dll
- 重新编译 MOD
参考来源
- 七日杀中文MOD网 DLL教程:https://www.7risha.com/65022.html
- DLL MOD 开发模板:https://www.7risha.com/70468.html
- 实体扫描入门教程:https://www.7risha.com/68198.html