Моддинг в Bannerlord: Система сохранений


Моддинг в Bannerlord: Система сохранений 

Оригинал статьи - ​https://docs.bannerlordmodding.com/_csharp-api/savesystem/​​​

ВНИМАНИЕ!
Для патча e1.0.10/e1.1.0 при установке кастомных данных, содержащих основные модели игры, будьте предельно внимательны.
Если данные будут сохранены непосредственно в папку с самим модом, то при удалении мода сохранение не загрузится из-за отсутствия ваших кастомных данных.
Это будет иметь место при определении кастомных LogEntry моделей и введении их в игру
(LogEntry.AddLogEntry(customLog);.
В качестве обходного пути вы должны либо включить функцию для полного вынесения кастомных данных из игры, или предоставить для этого мод.

SaveableTypeDefiner
Для определения пользовательских классов и структур выполните ваш собственный TaleWorlds.SaveSystem.SaveableTypeDefiner
Вам не нужно нигде его регистрировать, игра сама его найдёт.

    public class CustomSaveDefiner : SaveableTypeDefiner
    {
        // use a big number and ensure that no other mod is using a close range
        public CustomSaveDefiner() : base(2 _333_000) { }
        protected override void DefineClassTypes()
        {
            // The Id's here are local and will be related to the Id passed to the constructor
            AddClassDefinition(typeof(CustomMapNotification), 1);
            AddStructDefinition(typeof(ExampleStruct), 2);
            AddClassDefinition(typeof(ExampleNested), 3);
            AddStructDefinition(typeof(NestedStruct), 4);
        }
        protected override void DefineContainerDefinitions()
        {
            ConstructContainerDefinition(typeof(List<ExampleStruct>));
        }
    }

SaveableField и SaveableProperty
Чтобы выделить данные в ваших пользовательских класс/структура как сохраняемые используйте TaleWorlds.SaveSystem.SaveableFieldAttribute и TaleWorlds.SaveSystem.SaveablePropertyAttribute.
Похоже, что нет разницы между SaveableField и SaveableProperty, но если вы использовали один из них, придерживайтесь его. Они не взаимозаменяемые и данные не загрузятся, если их поменяли.
    public struct ExampleStruct
    {
        // Local ID's start from one if the class/struct does not inherit from any
        // game's types with saveable data
        [SaveableField(1)]
        public PartyBase Attacker;
    }
    public class CustomMapNotification : InformationData
    {
        // InformationData already contains 5 definitions, so start from 6 for custom data
        [SaveableProperty(6)]
        public Hero Mercenary { get; set; }
        [SaveableProperty(7)]
        public bool IsHandled { get; set; }
    }
    
    public struct NestedStruct
    {
        [SaveableField(1)]
        public bool Flag;
    }
    public class ExampleNested
    {
        [SaveableField(1)]
        public NestedStruct Data;
    }


CampaignBehaviorBase.SyncData
Есть также «общая база данных», которую можно использовать между одним/несколькими CampaignBehaviorBase. С ней вы сможете хранить такие кастомные данные, как:
  • Array (массив)
  • List (список)
  • Dictionary (словарь)
  • Queue (Очередь (FIFO ("первый вошел - первый вышел")))

    public class CustomBehavior : CampaignBehaviorBase
    {
        private List<ExampleStruct> _customDataMap = new List<ExampleStruct>();
        public override void SyncData(IDataStore dataStore)
        {
            dataStore.SyncData("customDataMap", ref _customDataMap);
        }
    }

Заметки:
Сообщество теперь должно решить как справиться с противоречиями saveBaseId.



- используйте эту кнопку если вы обнаружили ошибку/искажение содержимого/отсутствие контента в новости или если хотите сообщить администрации о выходе новой версии мода и т.п.

Комментариев 1

Гридень
london22
Офлайн 14 августа 2020 21:07 поделиться
Надеюсь, будет полезно 


(A+B)2 = A2 + B2
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Онлайн

Сейчас на сайте: 30
Гостей: 28

Пользователи: 
- отсутствуют

Последние комментарии

MOD wind of the war - New Era 74fix8
nerstarg, 21 октября 2024 22:22
вроде бы у мода слили новую версию под номером 75 Fix 30.2 (точно не 75fix3 - там файлы датированы...
MOD Napoleonic Wars Functional/UI pack
glik, 20 октября 2024 13:33
Есть ли у кого-нибудь еще такая модификация?...
MOD NOVA AETAS (ОБСУЖДЕНИЕ)
Hezed, 17 октября 2024 13:55
gogotop, Вашу проблему легче решить. Вам нужно дождаться пока лорды будут проходить рядом с...
MOD Honour&Glory (Честь и Слава)
Дима Гончар, 15 октября 2024 17:18
Andriyko, запрошую доречі у наш discord сервер, там ми можемо оперативно відповідати на питання і...
MOD Honour&Glory (Честь и Слава)
Кривий Ніс, 15 октября 2024 17:15
Andriyko, це фракційний козацький квест. Береться в Байди Вишневецького, якщо з козаками позитивні...
Sunset Racer - Моя новая игра про ретро авто!
the_raven, 14 октября 2024 02:01
А где Советский автопром, прастихоспади?   А вообще, напнило мне Ford Racing 2. Прикольная была...
MOD Horses
the_raven, 14 октября 2024 01:58
А разве этот мод не называется просто Horses? На Нексусе она называется просто Horses....
MOD Honour&Glory (Честь и Слава)
Andriyko, 13 октября 2024 13:54
Привет народ, подскажите, где брать квест на Казацкую бухту, для получения лодки?...
MOD Honour&Glory (Честь и Слава)
Andriyko, 12 октября 2024 16:59
Привет всем! Кто знает, как взять квест для получения лодки? Играл первый раз и помню, что возле...