Голосование

Как вы оцениваете Смуту?












Оформление



Пользователей
  • Всего: 28871
  • Последний: 123WwW2004
Сейчас на форуме
Пользователи: 0
Гостей: 266
Всего: 266

0 Пользователей и 1 Гость просматривают эту тему.

Тема: [Code] Базовый C# Мод  (Прочитано 4463 раз)

  • Сообщений: 452
  • За материальную помощь сайту
    • Просмотр профиля
+6
« : 27 Марта, 2020, 14:02 »

Введение


Данное руководство покажет вам, как шаг за шагом, создать базовый мод для Mount&Blade II: Bannerlord, используя язык C#. Этот мод добавляет кнопку "Message" в главное меню одиночного режима игры. При ее нажатии, происходит отправка сообщения "Hello World" в чат.

Перед началом


Моддинг в Mount&Blade II: Bannerlord в данный момент имеет ограничения, связанные с отсутствием доступа к инструментам мододелов от разработчиков. В тоже время доступно множество вещей с которыми можно работать и которые можно будет менять в версии для раннего доступа, не дожидаясь официальных инструментов.

Инструментарий


C# IDE (интегрированная среда разработки)
C# Decompiler (декомпилятор)
  • dnSpy или dotPeek (не требуется для базовых модификаций)
Текстовый Редактор

Вы также можете использовать Bannerlord.exe вызывая его из ".bat" файла (для более подробной информации см. пункт "Отладка"). Установка довольно проста (скопируйте файл с расширением ".exe" в папку bin\Win64_Shipping_Client, папку "Modules" в папку "Modules" игры

Cоздание папки модуля и файла SubModule


  • Найдите папку "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>

Создание и настройка проекта Visual Studio


До того как начать настраивать проект в 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. Пока что в ней не хватает информации по некоторым направлениям, но она будет дополнятся. Если вам интересен дальнейший моддинг игры, советую ознакомиться с ней
« Последнее редактирование: 17 Апреля, 2020, 13:16 от Fddd »
  • Фракция: Наемники
  • Сообщений: 611
  • За создание русификаторов За создание технических проектов различного характера За активную деятельность, связанную с публикациями и помощью другим посетителям
    • Просмотр профиля
0
« Ответ #1 : 03 Января, 2021, 23:40 »
Может не в той теме спрашиваю, но мне нужно перевести мод, а часть строк в dnSpy при их переводе обратно не компилируются. Это строки в контекстном меню которых отсутствуют пункты Изменить инструкции IL и Изменить метод. Поднапряг свои мозги и понял, что эти строки (а в идеале вообще все) нужно вынести в отдельный xml-файл, присвоив им ID. Но как это сделать? Стал искать. Нашёл видео на китайском сайте и языке. Нифига не понял - я тупой. Объясните пожалуйста доступным, даже такому тупому как я, языком.
Собственно, вот проблема


А это видео того китайца
https://www.bilibili.com/video/BV1Tt4y117K2/

СиЧЪ Total War СиЧЪ Total War
Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.
Сайт работает на быстром VPS/VDS хостинге от FASTVPS


Powered by SMF 2.0 | SMF © Simple Machines LLC