这个教程不会教大家太高深的语法之类的,从实用方面快速入手,让新手+AI(如deepseek)就能快速制作出你想要的第一份功能
隐藏内容需要回复可以看见
回复
这个教程不会教大家太高深的语法之类的,从实用方面快速入手,让新手+AI(如deepseek)就能快速制作出你想要的第一份功能
隐藏内容需要回复可以看见
1、本站所有内容由用户发表,作者与本站享有帖子版权;
2、转载或者引用本文内容请注明来源及原作者;
3、如内容侵犯到任何版权,请联系本站将及时予与删除;
4、遇到MOD提取码错误或链接失效,请检查提取码是否复制了空格,链接失效可以私信作者或站长进行补偿;
5、如遇到其他问题无法解决可以私信站长进行处理;
6、游戏MOD属于虚拟数字商品,一经购买即获得了内容,原则上不允许申请退款,购买即默认同意上述规则;
"点赞是美意,打赏是鼓励"
请登录之后再进行评论
终于出了
接模组定制 +Q 1079703478
// 模组主类,实现IModApi接口以便被游戏识别和加载,重点是实现: IModApi接口 public class EntityScannerMod : IModApi { // 模组初始化方法,游戏加载模组时会自动调用 public void InitMod(Mod _modInstance) { try // 这句话会在模组被初始化时输出,方便查看模组是否载入成功 Debug.Log("[实体扫描] 初始化实体扫描系统..."); // 创建Harmony实例,使用当前类的完整名称作为唯一标识 // 这个标识通常是命名空间+类名,如"EntityScanner.EntityScannerMod" var harmony = new Harmony(GetType().ToString()); // 应用所有补丁 // 这行代码会扫描当前程序集中所有带有[HarmonyPatch]特性的类和方法 // 并自动将它们应用为游戏原始代码的补丁 harmony.PatchAll(); Debug.Log("[实体扫描] 实体扫描系统已就绪"); } catch (Exception ex) { Debug.LogError("[实体扫描] 系统初始化失败: " + ex.Message); } } }爱发电https://afdian.com/a/ma2097
然后你就可以在初始化方法下面继续编写你的主要功能实现了
爱发电https://afdian.com/a/ma2097
还有一件事忘了,很多萌新第一次复制别人代码发现怎么都是报错,那是因为模块没有引入:按照下面的流程来引入






选中后添加,你可以参考我的上图进行添加,之后就是缺什么补什么,如果不确定就问ai(注意,一定要看好我的路径,这是两个路径)
最后就是单机选框然后将全部添加的模块勾选后点右下角确定就添加完成了
爱发电https://afdian.com/a/ma2097
打开VS的教程:


爱发电https://afdian.com/a/ma2097
创建项目教程
爱发电https://afdian.com/a/ma2097
1
模组制作群720354804
好了我们回到代码部分:创建一个功能类,这个类中主要实现我们的功能主题,七日杀dllmod我们实现功能的主要方式是通过对原方法进行补丁,也就是使用Harmony补丁

这两行代码的意思是:我们要对EntityPlayerLocal类里的Update方法进行补丁
而补丁又分为两类:
前置补丁(Prefix) - 在原方法执行前运行:
查看或修改原方法的参数
决定是否执行原方法(通过返回false可以跳过原方法)
在原方法执行前准备环境或记录信息
后置补丁(Postfix) - 在原方法执行后运行
检查或修改原方法的返回值
执行一些清理操作
基于原方法的执行结果做额外处理
可以明显的看到我们的mod使用的是后置补丁,也就是说我们的代码是在源代码运行后才运行我们的代码,这样不会影响到原有功能的正常运行:
Update是七日杀中每帧都更新的一个方法,我们对他进行补丁就可以实现让mod随时都在运行,到达实时检测的目的,当然还有其他更好的不浪费内存的方法这里就不展开了
对于补丁方法的寻找,我们的思路应该是:实现什么,寻找什么,官方的源代码都是可以通过dnspy进行反编译查找的(当然你看不懂也可以去我的另一篇帖子看看翻译好的),我们这里只介绍Entitylocal和Entityalive类就能实现出大多数mod想要的功能了,你想要实现其他mod也是一样的原理
爱发电https://afdian.com/a/ma2097
// 这个方法用于记录游戏中所有实体类型的详细信息到日志中(每种类型只记录一次)
private static void LogEntityInfo(EntityPlayerLocal player)
{
// 获取游戏世界实例
var world = GameManager.Instance.World;
// 确保世界和实体列表存在
if (world?.Entities?.list == null) return;
// 遍历游戏中的所有实体
foreach (var entity in world.Entities.list)
{
// 跳过空实体
if (entity == null) continue;
// 获取实体的类型信息
var entityType = entity.GetType(); // 获取实体的C#类型
int classType = entity.entityClass; // 获取实体的游戏内类型ID
// 检查这个类型是否已经记录过(使用HashSet避免重复记录)
if (!loggedTypes.Contains(classType))
{
// 将此类型添加到已记录列表中,防止重复记录
loggedTypes.Add(classType);
// 输出实体的基本信息到日志
Debug.Log($"[实体信息] 发现新实体类型:");
Debug.Log($" - Entity Type: {entityType.FullName}"); // 完整的C#类名
爱发电https://afdian.com/a/ma2097
Debug.Log($" - Entity Class: {entity.entityClass}"); // 游戏内的实体类ID
Debug.Log($" - Entity Class Name: {(entity.EntityClass != null ? entity.EntityClass.entityClassName : "null")}"); // 游戏内的实体类名称
Debug.Log($" - Entity ID: {entity.entityId}"); // 实体的唯一ID
// 针对生物类型实体,额外记录生命值信息
if (entity is EntityAlive entityAlive) // 检查是否是活的实体(如丧尸、动物、玩家等)
{
Debug.Log($" - Is EntityAlive");=
Debug.Log($" - Health: {entityAlive.Health}/{entityAlive.GetMaxHealth()}"); // 记录当前生命值和最大生命值
}
// 检查是否是NPC类型(非玩家角色)
if (entity is EntityNPC)
{
Debug.Log($" - Is EntityNPC");
}
// 检查是否是商人类型
if (entity is EntityTrader)
{
Debug.Log($" - Is EntityTrader");
}
// 记录实体在游戏世界中的坐标位置
Debug.Log($" - 坐标: {entity.position}");
}
}
}
爱发电https://afdian.com/a/ma2097