Esports Godfather

Esports Godfather

Not enough ratings
《电竞教父》模组开发简易指南
By Zae
本指南主要介绍如何制作功能性模组(以下简称插件),并将插件发布到Steam创意工坊。
2
2
2
   
Award
Favorite
Favorited
Unfavorite
环境准备
  1. 《电竞教父》本体,插件需要依赖游戏文件才能正常编译;

  2. 《电竞教父:开发工具》,此工具会和本体一起入库,可在库存的“软件”分类下找到;

  3. .NET SDK 9.0+[dotnet.microsoft.com]

  4. 用于编写代码的IDE,例如 Visual Studio Code[code.visualstudio.com]

  5. 您还可以安装 ILSpy[github.com],它能浏览电竞教父的反编译代码。
创建工程
首先创建模组工程:



创建完成后进入,双击【模组信息(未创建)】创建模组描述:
(此文件用于记录模组内包含的插件列表)



点击【模组 - 添加 - 生成C#工程】创建插件项目;

点击④选择要放置的插件目录;注意此目录为源代码目录,不应放到Content下。
(图中在模组工程的 Src 目录下,创建了名为 MyPlugin 的文件夹)

点击【生成项目】创建插件工程:



生成完毕后,开发工具应该出现刚创建的插件项,并弹出了插件所在的文件夹:

编写插件
插件脚本通常继承ModScrptBase类,此类型提供了以下回调入口:

OnModInit(ModInitContext context)
插件初始化时调用,可通过context配置自定义选项
OnSettingObjectLoaded(SettingObjectLoadedContext context)
设定源被加载时调用,可在这里修改现有设定或添加新设定
OnGameEntered(Game game)
加载存档或开始新游戏后调用
OnClubAffairEntered(ClubAffair affair)
每次进入俱乐部事务时调用
OnBattleEntered(Battle battle)
进入战斗时调用
OnBattleExited(Battle battle)
战斗结束时调用

目前大部分插件会先通过OnSettingObjectLoaded回调向游戏添加装备、卡牌等新设定,再在OnGameEntered修改现有赛季规则(如修改英雄池,解锁装备等)。

在开发时,推荐使用ILSpy工具查看游戏代码,以便更好地理解游戏内部逻辑。

关于更多例子,请参考社区内的示例

编译

插件脚本需要编译为DLL文件才能被游戏加载。且生成的DLL文件应该放置在【Content/Dll/程序集名称】下。

如果通过开发工具生成的项目,会自动创建一个发布文件(.pubxml),您可以在控制台输入以下命令进行发布:

dotnet publish -p:PublishProfile=PublishToModFolder

或者双击插件目录下的【PublishToModFolder.cmd】文件执行上述命令。

执行后,在【Content/Dll】下确认生成的DLL文件:

测试和发布插件
测试

首先检查开发工具中正确展示了您的插件,且列表中包含编译后的Dll文件:


游戏存档文件夹下有【Mods】目录,用于存放本地模组,可以将模组目录(Content)复制到上述Mods目录下,复制后目录结构如下所示:


此时启动游戏,点击Mod按钮,能看到插件被加载:


注:可以修改复制到Mods文件夹下的Content目录的名称,以避免多个本地模组的名称冲突情况;另外,记得每次编译后复制到此目录。

发布

准备完毕后即可上传模组至创意工坊。如下图所示:

- 点击【模组 - 发布】进入发布页;如果之前已经发布,此处可以编辑已发布的信息或上传新内容。

- 首次发布需要输入物品标题、标签、描述、并指定物品图标。

- 如果您不确定上传后的效果,可以先将可见性调整为【隐藏】,上传后到创意工坊页面做进一步修改再作公开。


最后点击发布按钮上传模组。提示发布成功后,可能需要等待几分钟才能在创意工坊看到自己的模组。

6 Comments
VOID 20 Jun @ 7:03am 
模组能改背景音乐吗?
物品图标咋指定?
Citrus 4 May @ 9:10am 
感谢作者的详细教程 让我一个小白也能自制Mod
妫甄 20 Mar @ 5:42am 
我这编译时候提示我(error CS0246: 未能找到类型或命名空间名“AthletePersonalitySettingObject”(是否缺少 using 指令或程序集引用?)),没办法正常编译出DLL该怎么办?下载的示例里的内容直接编译也会如此
Zae  [author] 17 Jan @ 9:55am 
Memento Mori 16 Jan @ 7:23am 
Very helpful.... why no english man