Данное руководство покажет вам, как шаг за шагом, создать базовый мод для Mount&Blade II: Bannerlord, используя язык C#. Этот мод добавляет кнопку "Message" в главное меню одиночного режима игры. При ее нажатии, происходит отправка сообщения "Hello World" в чат.
Моддинг в Mount&Blade II: Bannerlord в данный момент имеет ограничения, связанные с отсутствием доступа к инструментам мододелов от разработчиков. В тоже время доступно множество вещей с которыми можно работать и которые можно будет менять в версии для раннего доступа, не дожидаясь официальных инструментов.
C# IDE (интегрированная среда разработки)
C# Decompiler (декомпилятор)
Текстовый Редактор
Вы также можете использовать Bannerlord.exe вызывая его из ".bat" файла (для более подробной информации см. пункт "Отладка"). Установка довольно проста (скопируйте файл с расширением ".exe" в папку bin\Win64_Shipping_Client, папку "Modules" в папку "Modules" игры
- Найдите папку "Modules" в папке с игрой
- Создайте и назовите папку по своему усмотрению (к примеру "MyModule")
- Cоздайте папку "bin" внутри папки "MyModule",а потом внутри папки "bin" создайте подпапку "Win64_Shipping_Client", но не переходите в нее (она будет использовать для хранения ваших библиотек)
- В папке модуля создайте текстовый файл и переименуйте его в "SubModule.xml" (без кавычек) и вставьте текст который вы можете видеть ниже
- Проверьте отображается ли ваш модуль в лаунчере, в спиcке модулей для одиночной игры (singleplayer)
<Module>
<Name value="My Module"/>
<Id value="MyModule"/>
<Version value="v1.0.0"/>
<SingleplayerModule value="true"/>
<MultiplayerModule value="false"/>
<DependedModules/>
<SubModules>
<SubModule>
<Name value="MySubModule"/>
<DLLName value="../../Modules/MyModule/bin/Win64_Shipping_Client/ExampleMod.dll"/>
<SubModuleClassType value="ExampleModNameSpace.MySubModule"/>
<Tags>
<Tag key="DedicatedServerType" value="none" />
<Tag key="IsNoRenderModeElement" value="false" />
</Tags>
</SubModule>
</SubModules>
<Xmls/>
</Module>
До того как начать настраивать проект в Microsoft Visual Studio, важно понять что это не требуется для простейших модификаций (например изменение или добавление предметов/ персонажей/сцен).
- Запустите Microsoft Visual Studio и выберите Create New Project (в редакции на руском языке выберите Файл>Создать>Проект)
- Выберите библиотеку классов (.NET Framework)
- Назовите ваш проект и выберите .NET Framework 4.7.2. Если данная опция вам не доступна, скачайте специальный пакет для разработчиков (developer pack) здесь
- Теперь когда ваш проект создан, задайте путь для исходных файлов компиляции проекта в Modules/ВашеНазваниеМодуля/bin, которая находится в папке с вашой игрой
- Также нужно сделать "ссылки" с вашего новосозданного проекта на библиотеки TaleWorlds, которые находятся в bin\Win64_Shipping_Client
- Для начала создадим базовый класс MySubModule (который в свою очередь наследует класс MBSubModuleBase) и применим заимствования к нему. У вас должно получиться что то такое (смотреть первый блок "Code")
- Добавим в наш класс метод OnSubModuleLoad() и укажем на его перезапись (смотреть второй блок "Code")
- После этого добавим немного кода в наш перезаписанный метод. По сути мы добавляем кнопку в главное меню используя метод AddInitialStateOption, а за вывод изображения на экране отвечает DisplayMessage (смотреть третий блок "Code")
- Скомпилируйте ваш код используя комбинацию клавиш CTRL+B или CTRL+SHIFT+B (итоговый код в четвертом блоке "Сode")
- Откройте Community Launcher и выберите ваш мод в списке модулей для одиночной игры
- Запустите игру. В главном меню вы увидите кнопку "Message", нажав на нее, в левом нижнем углу появится текст "Hello World"
- Поздравляем! Вы создали свой первый мод для Mount&Blade II: Bannerlord
using TaleWorlds.Core;
using TaleWorlds.Localization;
using TaleWorlds.MountAndBlade;
namespace ExampleModNameSpace
{
public class MySubModule : MBSubModuleBase
{
}
}
protected override void OnSubModuleLoad()
{
base.OnSubModuleLoad();
}
Module.CurrentModule.AddInitialStateOption(new InitialStateOption("Message",
new TextObject("Message", null),
9990,
() => { InformationManager.DisplayMessage(new InformationMessage("Hello World!")); },
false));
using TaleWorlds.Core;
using TaleWorlds.Localization;
using TaleWorlds.MountAndBlade;
namespace ExampleModNameSpace
{
public class MySubModule : MBSubModuleBase
{
protected override void OnSubModuleLoad()
{
base.OnSubModuleLoad();
Module.CurrentModule.AddInitialStateOption(new InitialStateOption("Message",
new TextObject("Message", null),
9990,
() => { InformationManager.DisplayMessage(new InformationMessage("Hello World!")); },
false));
}
}
}
- Откройте настройки проекта и выберите кнопку "Debug" (Отладка)
- Выберите опцию Start external program (запуск внешнего приложения) и сконфигурируйте путь к файлам "Bannerlord.exe"
- Удостоверьтесть что в качестве рабочей директории выбрана папка bin\Win64_Shipping_Client
- Добавьте следующие command line arguments (аргументы коммандной строки) "_MODULES_*Native*MyModule*_MODULES_ /singleplayer" (без кавычек, также удостоверьтесь что название вашего модуля "MyModule", а не какое либо другое). Вы также можете использовать данные аргументы коммандной строки для запуска своих модов (для этого создайте файл с расширением".bat" и поместите в папку bin\Win64_Shipping_Client, предварительно добавьте в файл следующее "Bannerlord.exe _MODULES_*Native*MyModule*_MODULES_ /singleplayer" (без кавычек))
- В качестве среды разработки для ваших модов, вы также можете использовать JetBrains Rider (отличается многими полезными функциями, в том возможностью смотреть декомпилированный код тейлов сразу, не прибегая к помощи сторонних декомпиляторов). Минусы это то что программа платная, но есть версия для студентов
- Официальной поддержки модификаций от тейлов ждать еще как минимум пол-года, а то и год (полный функционал будет доступен только после релиза). То что я описал выше, это отличная возможность опробовать себя в моддинге уже сейчас и получить полезные навыки, которые пригодятся в будущем
- За основу данного туториала, был взят гайд от Ster, который доступен по этой ссылке https://github.com/Bannerlord-Modding/Documentation/blob/master/_tutorials/basic-csharp-mod.md, а также документация по игре https://github.com/Bannerlord-Modding/Documentation. Пока что в ней не хватает информации по некоторым направлениям, но она будет дополнятся. Если вам интересен дальнейший моддинг игры, советую ознакомиться с ней