logo
ru
ru

Мод почтовой системы

Создатель: Digus
Обновлено:28/03/2025 14:16:59
49KB
mcafee
Аутентификация
Доверяют 200,000,000+ пользователям

Предварительно необходимые моды

будет автоматически установлен при использовании Мод почтовой системы

О этом моде

Рамка для использования почтового ящика в игре. Команды консоли для настройки почты. Интерфейсы кода и пакета контента.
Цель:
Упростите отправку почты игроку, предоставив больше контроля над тем, когда и что следует получать.
Также предоставлены дополнительные возможности, которые невозможно реализовать при простом редактировании файлов данных, например, изменение цвета текста и фона письма по желанию.

Установка:

Журнал изменений:

1.20.0
  • Добавляет в игру новый пользовательский ресурс (DIGUS.MailFrameworkMod/MailData). Это означает, что письма MFM теперь можно загружать с помощью Content Patcher и использовать все его функции, например, токены. Он поддерживает те же свойства.
  • Буквы Content Pack также загружаются в новый пользовательский актив и, следовательно, могут редактироваться с помощью Content Patcher.
  • Пакеты контента теперь загружаются в кэш при запуске игры, а не перезагружаются при каждой загрузке сохранения. Вы можете принудительно перезагрузить пакеты контента с помощью консольной команды.
  • Свойства «Текст» и «Заголовок» теперь поддерживают токенизированные строки.
  • Ресурсы текстур теперь могут быть ресурсом игры, а не только ресурсом в папке мода.
  • Новое свойство GameStateQuery как условие доставки письма.
1.19.0
  • Новое свойство сохранять почтовое отправление действительным после того, как все условия были выполнены в течение дня, но почта не была прочитана в этот день.
  • Новая функция для обработки случайно выбранных вложений
  • Новое свойство, устанавливающее, сколько элементов из списка вложений следует выбрать для доставки.
  • Новое свойство позволяет задать «RandomGroup» для вложения, чтобы оно выбиралось из этой группы, а не из всего списка.
  • Новое свойство для установки «Веса» для заданного навесного оборудования при его случайном выборе.
  • Новое свойство для установки количества элементов, которые следует выбрать из заданной группы, вместо использования значения по умолчанию.
  • Новое свойство, указывающее, можно ли выбрать элемент из заданной группы более одного раза.
  • Новый набор свойств для установки требования MailReceived для вложений и ответов
  • Новое свойство, позволяющее удалить MailReceived после прочтения письма или выбора варианта ответа.
  • Новое свойство для установки стоимости для данного варианта ответа.
  • Новый тип предмета — «None». Его можно использовать, когда требуется случайная вероятность не доставить предмет, не вызывая ошибок/предупреждений в журнале.
1.18.0
  • Новое свойство Ids заменяет Index и Name для CollectionConditions. Оно может агрегировать количество нескольких элементов, суммируя их значения для сравнения с итоговой суммой.
  • Новое свойство ReplyConfig для добавления поведения ответа. Вы можете показать игроку какой-либо вариант ответа после прочтения письма, и он добавит один или несколько текстов MailReceived в зависимости от выбранного варианта. На основе этого выбора можно реализовать дополнительную логику мода.
  • Исправлено письмо с рецептом, не поддерживающим свойство CustomTextColorName.
  • Исправлено исключение нулевой ссылки при загрузке в игру элемента с нулевым именем.
1.17.1
  • Письма с контентом, содержащие свойство рецепта, не должны иметь вложений, чтобы их можно было доставить повторно, если рецепт не изучен. (свойство рецепта игнорируется, если есть вложения)
  • Исправление рецептов приготовления блюд с использованием той же логики, которая применялась ранее к рецептам создания блюд.
1.17.0
  • Новое свойство для установки качества вложения
  • Письма с контентом и рецептами следует отправлять повторно, если рецепт не изучен.
  • Исправлены предупреждения о Slingshot при использовании квалифицированного идентификатора предмета.
  • Исправлена ошибка, из-за которой рецепты для крафта доставлялись даже если рецепт уже был изучен.
  • По причинам, связанным с прежним подходом, если идентификатор рецепта не найден среди изученных рецептов, будет выполнен поиск рецепта, создающего предмет с именем, соответствующим идентификатору рецепта.
1.16.1
  • Исправлен перевод названия рецепта.
1.16.0
  • Обновите мод для совместимости со Stardew Valley 1.6.
  • Новая команда для перезагрузки пакетов контента
  • Изменено имя MailDao на MailRepository. (Влияет только на моды SMAPI, использующие его).
  • Новый тип предмета «QualifiedItemId» для вложений должен работать для всех типов предметов в игре, если вы используете правильную квалификацию.
  • Новая недвижимость на особых условиях. (Свадьба и рождение ребенка)
  • Новое свойство для CustomTextColor, старое устарело.
  • Новое свойство HasMods
  • Новое свойство RequireAllMods
  • Идентификаторы событий теперь являются строками. (Числа по-прежнему должны работать)
  • Удалена устаревшая логика SV 1.6, включенная в MFM.
  • Исправлена ошибка альфа-версии, из-за которой письмо не открывалось на странице получения почты.
Спойлер:
Показывать
1.15.0
  • Новый API-интерфейс для модов SMAPI.
  • Метод API для загрузки папки с контентом из вашего мода SMAPI.
  • Метод API для загрузки письма.
  • Метод API для получения данных письма.
  • Метод API для получения строки почтовых данных письма.
  • Исправлена ошибка, из-за которой почтовый ящик работал некорректно, если при закрытии письма возникала ошибка.
  • Лучше запишите эти ошибки.
1.14.0
  • Дополнительные изменения для совместимости со SMAPI 4
  • Новый атрибут в классе письма для установки ITranslationHelper.
  • В пакете контента нет необходимости что-либо менять, но это изменение должно помочь избежать некоторых редких проблем i18n.
  • Моды, использующие MFM через код, могут обновить свою реализацию.
1.13.0
  • Сделайте мод совместимым со SMAPI 4.
  • Новое свойство для уровня «Самая глубокая шахта».
  • Новая недвижимость за текущие деньги.
  • Новая недвижимость за вырученные деньги.
  • Новая консольная команда для принудительного обновления почтового ящика с целью облегчения отладки моддерами.
  • Меню сбора писем теперь также отображает настраиваемую кнопку закрытия.
1.12.2
  • Сделайте мод совместимым с версией 1.5.5, не заставляя SMAPI конвертировать его.
  • Должно исправить некоторые проблемы с работой вложений в ОС Unix.
  • Новая недвижимость для улучшения дома.
1.12.1
  • Исправлена ошибка, из-за которой не загружалась утилита расширенных предварительных условий.
1.12.0
1.11.0
  • Поддержка DGA (Dynamic Game Assets) в качестве вложений.
1.10.2
  • Исправлена ошибка, из-за которой названия кулинарных рецептов на английском языке отображались как null при добавлении с помощью Json Assets.
1.10.1
  • Исправлена ошибка, из-за которой автоматически открывались письма без текста, нарушавшие работу мода при наличии файлов i18n.
  • Исправлена ошибка, из-за которой письмо из пакета контента не загружалось после одного предупреждения о состоянии коллекции.
  • Добавляет новый тип требований к коллекции для рецептов крафта.
1.10.0
  • Теперь поддерживаются все стандартные инструменты.
  • Поддержка стандартных рогаток в качестве оружия. Если вы используете индекс или название рогатки, она будет создана корректно.
  • Новое свойство «Автоматическое открытие» для случаев, когда вы хотите использовать условия MFM для сохранения идентификатора письма как прочитанного без написания фактического письма.
1.9.2
  • Оптимизация загрузки ресурсов из пакетов контента.
  • Исправлена ошибка, из-за которой обратный вызов писем не вызывался, если было открыто меню для добавления предмета в инвентарь.
1.9.1
  • Исправлена ошибка, из-за которой письмо MFM не открывалось и не удалялось из ящика за текущий день, если при нажатии на почтовый ящик вы держали в руках какой-либо предмет.
1.9.0
  • Новое свойство для письма, созданного с помощью SMAPI, позволяет динамически добавлять элементы в письмо.
  • Новый метод удаления писем из почтового ящика.
1.8.1
  • Исправление, позволяющее избежать конфликтов писем в локальном кооперативе.
  • Исправлена редкая ситуация, когда мод переставал работать, если игра неправильно закрывала меню писем.
1.8.0
  • Поддержка мебели, оружия и обуви в качестве дополнений.
  • Новое свойство для установки уровня обновления прикрепленных инструментов.
1.7.0
  • Поддержка колец в качестве вложений.
  • Новые условия для рецептов.
  • Новое свойство для настройки фона с помощью пакетов контента.
  • Поддержка настройки кнопки «Закрыть» с помощью пакета контента и кода.
1.6.0
  • Поддержка i18n в контент-пакетах.
  • Новые условия для построек на ферме.
  • Новые свойства условий для полученной почты. (используется для флагов заданий)
  • Новые свойства условий для событий.
  • Новый список условий для пунктов меню коллекций.
  • Новый список условий для игровой статистики.
  • Новое свойство статуса дружбы для списка условий дружбы с NPC.
  • Новая случайная функциональность при столкновении идентификаторов групп.
1.5.1
  • Исправлена ошибка, из-за которой письма без идентификаторов групп группировались вместе.
1.5.0
  • Буква теперь будет отображаться в меню коллекции, если задано название. Пользовательские текстуры и цвета также будут отображаться в меню коллекции.
  • Письма теперь могут иметь идентификатор группы. Письма с одинаковым идентификатором группы никогда не доставляются в один и тот же день.
  • Новое условие для пакетов контента: «RandomChance».
  • BigObject теперь называется BigCraftable, как в коде игры.
  • Исправление опечаток в шаблоне.
1.4.1
  • Добавляет поддержку Stardew Valley 1.4.0
  • Добавляет свойство «Название» для отображения букв в меню коллекции. Пока не полностью реализовано, но моддеры могут начать его настраивать.
1.4.0
  • Добавляет поддержку пакета контента для моддеров, позволяющую добавлять собственные письма, с настройками всех функций, предоставляемых этой структурой, и с наиболее распространенными используемыми условиями доставки.
  • Исправлена ошибка, из-за которой контроллеры не работали при прикреплении предметов.
  • Исправьте, чтобы вложения отображались правильно, если к письму прикреплено более одного элемента.
  • Исправлена ошибка, из-за которой письмо не закрывалось, если ваш инвентарь заполнен и открыто меню для управления им.
  • Исправлена ошибка, из-за которой стопка элементов не добавлялась в почту, даже если настроена соответствующая настройка.
  • Добавляет поддержку SMAPI 3
1.3.4
  • Добавляет поддержку Stardew Valley 1.3.36
1.3.3
  • Добавляет поддержку SMAPI 3
1.3.2
  • Добавляет поддержку Stardew Valley 1.3.32
1.3.1
  • Добавляет команды для удаления и добавления в список полученных игроком писем.
1.3.0-бета.6
  • Добавляет поддержку рецептов крафта
  • Добавляет поддержку пользовательского фона
  • Добавляет поддержку пользовательского цвета текста
  • Новый способ открыть пользовательское письмо, теперь с использованием гармонии
  • Конфигурационный файл для включения старого способа открытия пользовательских писем.
1.2.0
  • Поддержка рецептов i18n.
  • Исправлена ошибка, из-за которой мод работал некорректно после возврата в главное меню.
  • Исправлена ошибка, из-за которой почта не доставлялась, если условие письма вызывало исключение.
1.1.0
  • Исправлена ошибка, из-за которой приходило письмо с сообщением «налог уплачен» во время сна и выхода из игры, не прочитав пользовательское письмо.
  • Персонализированные письма могут содержать рецепты.
  • Эта версия несовместима со старой. Для использования этой версии необходимо обновить моды.
1.0.0
  • Добавить пользовательские письма
  • В индивидуальных письмах могут быть предметы.

Для моддеров, использующих пакет контента:
  • Внутри папки мода находится шаблон с прокомментированными инструкциями о том, что делает каждое свойство.
  • Все буквенные функции, за исключением условий и обратного вызова, такие же, как при кодировании с использованием фреймворка.
  • Условия ограничены реализованными, и обратный вызов всегда устанавливает идентификатор письма как полученный. Если вам нужны расширенные условия, вам всё равно следует их закодировать. Или вы можете вежливо предложить мне добавить условие в пакет контента. Если оно имеет смысл, я, возможно, его добавлю.
  • Вот шаблон, добавленный в файл мода:
Спойлер:
Показывать
[
    {
"Id": "MyMod.MyMailId", // Идентификатор письма. Важно, чтобы строка была уникальной, чтобы избежать конфликтов. Также она не должна содержать пробелов.
"GroupId": "MyMod.MyGroupId", // Идентификатор группы писем. Письма с одинаковым идентификатором группы никогда не доставляются в один день. Письма, зарегистрированные первыми, имеют приоритет, если только идентификатор группы не заканчивается на ".Random" — в этом случае будет выбрано случайное письмо. Значение по умолчанию — null.
"Title": "Заголовок моего письма", // Заголовок письма. Будет отображаться в меню коллекций. Установите значение null или удалите строку, если не хотите, чтобы письмо отображалось в коллекции. Если предоставлен файл перевода, необходимо указать здесь ключ перевода, но можно оставить значение null, чтобы не отображать заголовок.
"Текст": "Уважаемый @^Это моя персональная почта.", // Текст письма. Вы можете использовать @ для имени игрока и ^ для переноса строк. Вы также можете использовать команды базовой игры для добавления денег, предметов и прочего. Если предоставляется файл перевода, необходимо указать здесь ключ перевода.
"RandomlyChooseAttachment": 2, // Если задано число, будет случайным образом выбрано указанное количество элементов из списка вложений для каждой группы. Значение по умолчанию — null.
"RandomlyChooseAttachmentPerGroup": { "CaveItems": 3 }, // Если здесь заданы группа и количество, для выбора предметов будет использоваться это количество, а не то, которое задано в RandomlyChooseAttachment. Значение по умолчанию — пустое.
"AttachmentGroupWithReplacement": [ "CaveItems" ], // Вложения по умолчанию выбираются случайным образом из списка без замены. Если вы хотите, чтобы был выбран вариант, заменяющий вложения, добавьте группу в список. Если группы не добавлялись, используйте пустую строку. Значение по умолчанию — пустой список.
"Вложения": [ // Список вложений. Удалите свойство, чтобы не прикреплять элементы к письму.
            {
"Type": "Object", // [Object|BigCraftable|Tool|Ring|Furniture|Weapon|Boots|DGA|QualifiedItemId|None] Обязательно. Тип предмета, который будет прикреплён. Если не указан, предмет будет проигнорирован. Значение "None" всегда игнорируется без ошибок в журнале и должно использоваться, когда требуется оценить вероятность отсутствия прикреплённого предмета.
"Name": "Cave Carrot", // Используется для поиска индекса элемента. Это необходимо при использовании пользовательских объектов, таких как Json Assets. Должен быть указан полный идентификатор DGA, если используется DGA. Если не указано, будет использоваться индекс. Значение по умолчанию — null.
"Index": "(0)78", // Индекс элемента. Должен быть уточнённым идентификатором элемента в виде строки, но также может работать как целое число для совместимости с предыдущими версиями. Если имя не указано или элемент для данного имени не найден, используется индекс. В противном случае вложение игнорируется. Игнорируется, если тип — DGA.
"Stack": 1, // Значение стека доставляемого предмета. Используется только для объектов и BigCraftable. Значение по умолчанию — 1.
"Quality": 2, // Качество доставляемого предмета. Используется только для объектов. 0 = нет, 1 = серебро, 2 = золото, 4 = иридий. Значение по умолчанию — 0;
"RequireMailReceived": [ "jojaVault", "ccVault" ], // Требует получения одного из писем. Список игр также содержит другие элементы, не являющиеся почтой, например, флаги центра сообщества. Значение по умолчанию — null, то есть получение письма не требуется.
"RequireAllMailReceived": false, // Если true, требуется, чтобы все письма из списка "RequireMailReceived" были получены. Значение по умолчанию — false.
"ProbabilityWeight": 1, // Вес этого вложения при выборе того, какое из них доставить. Модульная сумма всех весов в заданной группе и определение вероятности путём деления этого веса на общую сумму. Значение по умолчанию — 1.
"RandomGroup": "CaveItems" // При случайном выборе элементов группируем список по найденным группам и выбираем заданное количество из каждой группы. Значение по умолчанию — пустая строка, которая служит группой по умолчанию.
},
            {
"Тип": "Инструмент", // При использовании инструмента можно прикрепить только поддерживаемые.
"Name": "Axe", // [Топор|Мотыга|Лейка|Кирка|Коса|Золотая коса|Ведро для молока|Ножницы|Удочка|Сковорода|Возвратный скипетр] Требуется для инструментов. Название поддерживаемого инструмента. В противном случае вложение игнорируется.
"UpgradeLevel": 1 // Уровень улучшения инструмента. Обычные инструменты: 0 = камень, 1 = медь, 2 = сталь, 3 = золото, 4 = иридий. Удочка: 0 = бамбуковая удочка, 1 = тренировочная удочка, 2 = стекловолоконная удочка, 3 = иридиевая удочка. Игнорируется для других типов. Значение по умолчанию — 0.
},
            {
"Тип": "DGA", //элемент DGA
"Name": "spacechase0.DynamicGameAssets.Example/My Custom Item", // используйте полный идентификатор DGA. Обязательно.
"Stack": 10, // Значение стека доставляемого предмета. Используется только для объектов и BigCraftable. Значение по умолчанию — 1.
"Quality": 2 // Качество доставляемого предмета. Используется только для объектов. 0 = нет, 1 = серебро, 2 = золото, 4 = иридий. Значение по умолчанию: 0;
},
            {
"Type": "QualifiedItemId", // Любой поддерживаемый элемент
"Index": "(0)78", // Квалифицированный идентификатор элемента.
"Stack": 10, // Значение стека доставляемого предмета. Используется только для объектов и BigCraftable. Значение по умолчанию — 1;
"Quality": 2 // Качество доставляемого предмета. Используется только для объектов. 0 = нет, 1 = серебро, 2 = золото, 4 = иридий. Значение по умолчанию: 0;
            }
],
"Recipe": "Recipe Name", // Удалите эту строку, если не хотите прикреплять рецепт к письму. Это сработает только при отсутствии других вложений в письме. Для рецептов DGA используйте только идентификатор (ModID можно не добавлять).
"AdditionalMailReceived": ["MyMod.AnotherMailId", "VANILLA_FLAG"], // Используйте это для добавления дополнительного текста в список MailReceived. Может быть полезно для добавления флагов Vanilla или других идентификаторов писем MFM.
"MailReceivedToRemove": ["MyMod.AnotherMailThatNeedToBeResent","MyMod.SomeFlagThatWasLockingSomeFeature"], //Текст, который нужно удалить из списка MailReceived. Это можно использовать для отправки новых писем, событий, установки стандартных флагов, а также для предотвращения отправки других писем MFM...
"LetterBG": "CustomLetterBG.png", // Имя файла в вашем пакете контента, содержащего фон для пользовательской буквы. Он должен иметь ту же структуру, что и файл LetterBG игры. WhichBG будет связан с этим файлом для этой буквы. Если значение равно null или удалено, мод будет использовать LetterBG игры.
"WhichBG": 0, //Идентификатор фона письма. 0 = классический, 1 = блокнот, 2 = пирамиды
"TextColor": -1, //Удалите эту строку, чтобы использовать цвет по умолчанию. Будет проигнорировано, если задан CustomTextColor. -1 = Тёмно-красный, 0 = Чёрный, 1 = Небесно-голубой, 2 = Красный, 3 = Сине-фиолетовый, 4 = Белый, 5 = Оранжево-красный, 6 = Лаймово-зелёный, 7 = Голубой, 8 = Самый тёмный серый
"CustomTextColorName": "White", //Цвет текста.[http://www.foszor.com/blog/xna-color-chart/] По умолчанию будет использоваться свойство TextColor.
"UpperRightCloseButton": "CustomCloseButton.png", // Имя файла в вашем пакете контента, содержащего пользовательскую кнопку закрытия. Размер должен быть 12 x 12. Если значение равно null или удалено, будет использоваться кнопка по умолчанию.
"ReplyConfig": { // Если вы хотите, чтобы игрок отправил ответ после прочтения письма. Будут показаны варианты ответа, которые добавят одно или несколько сообщений "ReceivedMail" в зависимости от ответа игрока. Любая дополнительная логика, связанная с ответом, должна быть реализована на основе добавленного сообщения "ReceivedMail".
"QuestionKey": "MyMod.MyMailId.Question", //Ключ для идентификации вашего вопроса. Он предназначен только для внутреннего использования, но должен быть уникальным в вашем пакете контента, чтобы избежать конфликтов между ответами.
"QuestionDialog": "Отправьте ответ, выбрав награду:", //Ваш вопрос или текст, который будет отображаться над вариантами ответа. Если предоставлен файл перевода, необходимо указать здесь ключ перевода.
«Ответы»: [
                {
"ReplyKey": "MyMod.MyMailId.Reply1", //Должен быть уникальным среди ответов на вопрос.
"ReplyOptionDialog": "Мне нужны семена.", //Текст варианта ответа, который будет отображаться в списке ответов. Если предоставлен файл перевода, необходимо указать здесь ключ перевода.
"RequireMailReceived": [ "jojaVault", "ccVault" ], // Требует получения одного из писем. Список игр также содержит другие элементы, не являющиеся почтой, например, флаги центра сообщества. Значение по умолчанию — null, то есть получение письма не требуется.
"RequireAllMailReceived": false, // Если true, требуется, чтобы все письма из списка "RequireMailReceived" были получены. Значение по умолчанию — false.
"MailReceivedToAdd": [ "MyMod.MyMailId.PlayerSeedOption" ], // Текст для добавления в список MailReceived. Его можно использовать для отправки новых писем, событий, установки флагов, блокировки отправки других писем MFM...
"MailReceivedToRemove": [ "MyMod.MyMailId.PlayerSapplingOption" ], //Текст, который нужно удалить из списка MailReceived. Это можно использовать для отправки новых писем, событий, установки флагов Vanilla, а также для предотвращения отправки других писем MFM...
"ReplyResponseDialog": "Ваше письмо с просьбой о семенах отправлено.", //Текст, который будет отображаться после выбора этого варианта ответа. Если предоставлен файл перевода, необходимо указать здесь ключ перевода.
"Cost": 50 // Сумма денег, необходимая игроку для выбора этого варианта. Если игрок выбирает этот вариант, эта сумма немедленно вычитается из его денег. Всегда предлагайте вариант без стоимости, иначе вы рискуете заблокировать игрока.
                }
            ]
},
"Repeatable": false, // Если true, модер не будет проверять, что письмо уже доставлено. Значение по умолчанию — false.
"AutoOpen": false, // Если true, мод откроет письмо в начале дня после выполнения условий. Идентификатор письма будет отмечен как прочитанный, и, если задан рецепт, он будет изучен. Поскольку письмо никогда не будет показано, визуальные свойства, такие как заголовок, текст, фон и т. д., а также вложения, никогда не будут использоваться.
// УСЛОВИЯ ПОСТАВКИ
//Ниже приведены условия доставки. Удалите любую строку, если не хотите проверять это условие.
"Дата": "10 весна Y1", // Должна быть эта дата или более поздняя. Формат: "[1-28] [весна|лето|осень|зима] Y[1-999]".
"Дни": [7,14,21,28], // Должен быть одним из дней в списке.
"Времена года": ["осень"], // Должно быть одно из времен года в списке. [весна|лето|осень|зима]
"Погода": "солнечно", // Должно быть, это та самая погода из игры. Формат: "[солнечно|дождливо]".
"HouseUpgradeLevel": 2, // Уровень улучшения дома должен быть равен или выше указанного. 0 - начальный дом (нет смысла использовать это, просто удалите строку), 1 - кухня, 2 - второй этаж, 3 - подвал.
"DeepestMineLevel": 80, // Самый глубокий уровень шахты должен быть равен или превышать указанное значение. 120 — последний уровень шахты, 121 — первый уровень пещеры Черепа.
"CurrentMoney": 10000, // Текущая сумма денег должна быть равна или превышать указанное значение.
"TotalMoneyEarned": 500000, // Общая сумма заработанных денег должна быть равна или превышать указанное значение.
"FriendshipConditions": // Каждый NPC из списка должен проверить все условия.
        [
            {
"NpcName": "Lewis", //Имя NPC. Можно использовать пользовательских NPC.
"FriendshipLevel": 8, // NPC должен иметь уровень дружеского расположения, равный или превышающий указанный. По умолчанию — 0.
"FriendshipStatus": ["Встречаются","Помолвлены","Женаты"] // [Дружба|Встречаются|Помолвлены|Женаты|Разведены] Требует, чтобы статус дружбы NPC был одним из списка. Удалите, чтобы статус не требовался.
            }
],
"SkillConditions": // Каждый навык в списке должен иметь уровень, равный или превышающий указанный. Можно использовать все закодированные навыки в оригинальной игре, включая Удачу. Нельзя использовать пользовательские навыки.
        [
{ "SkillName": "Фермерство", "SkillLevel": 1 }
],
"StatsConditions": // Каждая статистика в списке должна иметь значение, равное или превышающее заданное. Выберите StatsName или StatsLabel.
        [
            {
"StatsName": "СырСделан", //[ПосеянныеСемена|ДоставленныеПредметы|ПриготовленныеПредметы|ИзготовленныеПредметы|СнесенныеКуриныеЯйца|СнесенныеУтиныеЯйца|ПроизводствоКоровьегоМолока|ПроизводствоКозьегоМолока|ПроизводствоКроличьейШерсти|ПроизводствоОвечьейШерсти|ПроизводствоСыра|ПроизводствоКозьегоСыра|НайденоТрюфелей|СобраноКамней|РаздробленныхКамней|ВырытойЗемли|ДарованныхПодарков|ВремяБезСознания|СреднееВремяОтходаСна|ВремяВыловаРыбы|ТреснувшиеВалуны|РазрубленныеПни|ПройденныеШаги|УбитыеМонстры|НайденоАлмазов|Призматические [Найдено] [Другие драгоценные камни] [Найдено] [Пещерная морковь] [Найдено] [Медь] [Найдено] [Железо] [Найдено] [Уголь] [Найдено] [Монеты] [Найдено] [Найдено] [Иридий] [Найдено] [Выплавлено] [Напитки] [Сделано] [Сварено] [Изготовлено] [Дней игры] [Дней игры] [Уничтожено] [Палочки] [Найдено] [Заметки] [Задания выполнены] [Уровень звезды] [Урожай отправлен] [Доставлен] [Предметы собраны] [Убиты] [Слизи] [Треснуто] [Хорошие друзья] [Заработано] [Деньги человека] [По умолчанию] [Ноль].
"StatsLabel": "Name", // [exMemoriesWiped|childrenTurnedToDoves|trashCansChecked|boatRidesToIsland|beachFarmSpawns|hardModeMonstersKilled|timesEnchanted] Это текущая игровая статистика, идентифицируемая по метке. Если будут добавлены другие, они также должны поддерживаться. Также будут идентифицироваться пользовательские метки статистики, добавленные другими модами. Значение по умолчанию — null.
"Сумма": 1 // Сумма, которой статус должен быть равен или больше, чтобы условие было действительным.
            }
],
"CollectionConditions": // Каждое условие сбора списка должно иметь значение, равное или превышающее определенную сумму.
        [
            {
«Сбор»: «Отправлено», //[Отправлено|Рыба|Артефакты|Минералы|Кулинария|Изготовление] Требуется.
"Name": "Oil", // Устарело, вместо этого используются идентификаторы. Имя объекта или рецепта для коллекции "Crafting". Если это не коллекция "Crafting", будет выполнен поиск по этому имени в списке объектов для поиска индекса. Если имя не найдено, буква игнорируется. Будет объединено с другими свойствами. Значение по умолчанию — null.
"Index": 211, // Устарело, вместо него используются идентификаторы. Индекс объекта. Будет комбинироваться с другими свойствами. Значение по умолчанию — null.
"Ids": [ "282", "MossSoup" ], //Идентификаторы предметов или названия рецептов крафта. Будут объединены с другими свойствами. Суммы суммируются для сравнения со свойством "Amount".
"Сумма": 10 // Общее количество объектов в коллекции должно быть равно или больше, чтобы условие было верным.
            }
],
"SpecialDateCondition": // Должна быть эта дата или более поздняя.
        {
"SpecialDate": "ChildBirth", //[Свадьба|РождениеРебёнка] Обязательно
"YearsSince": 1, // Количество лет с момента наступления даты. 0 соответствует фактической дате, 1 — текущему году. Значение по умолчанию — 0.
"WhichChild": 1 //Если свойство SpecialDate равно ChildBirth, оно будет указывать на ребёнка. Значение по умолчанию — 1;
},
"ExpandedPrecondition": "d Mon Fri/HasItem Pink Cake/!JojaMartComplete/!w rainy", //Требуется мод Expanded Preconditions Utility. Чтобы понять, как это работает, обратитесь к документации к этому моду. Если мод не загружен, письмо не будет доставлено.
"ExpandedPreconditions": [ "!z spring/t 600 1000", "f Linus 1000/w rainy/z spring", "f Linus 2500" ], //Требуется мод Expanded Preconditions Utility. Чтобы понять, как это работает, обратитесь к документации к этому моду. Если мод не загружен, письмо не будет доставлено.
"RandomChance": 0.25, // Мод проверяет, меньше ли заданного случайное число от 0 до 1. Одно и то же сохранение в один и тот же день для одной и той же буквы всегда будет иметь одинаковый результат, чтобы избежать читерства.
"Buildings": ["Coop","Big Coop","Deluxe Coop"], // Требует, чтобы одно из зданий было построено на ферме в данный момент.
"RequireAllBuildings": false, // Если true, требуется, чтобы все здания из списка «Здания» были построены на ферме. Значение по умолчанию — false.
"MailReceived": ["jojaVault","ccVault"], // Требует получения одного из писем. Список игр также содержит другие элементы, не являющиеся почтой, например, флаги центра сообщества.
"RequireAllMailReceived": false, // Если true, требуется, чтобы все письма из списка "MailReceived" были получены. Значение по умолчанию — false.
"MailNotReceived": ["jojaVault","ccVault"], // Требует, чтобы письма не были получены. Список игр также содержит другие элементы, не являющиеся почтой, например, флаги центра сообщества.
"EventsSeen": [ "4", "32423" ], // Требует, чтобы игрок видел одно из событий. Должна быть строкой, но также может работать как целое число для совместимости с ретро-версиями.
"RequireAllEventsSeen": false, // Если true, требуется, чтобы игрок видел все события из списка "EventsSeen". Значение по умолчанию — false.
"HasMods": [ "SMAPI.ConsoleCommands", "SMAPI.SaveBackup" ], // Требует загрузки одного из модов. Должен быть указан уникальный идентификатор мода.
"RequireAllMods": false, // Если true, требуется загрузка всех модов из списка "HasMods". Значение по умолчанию — false.
"EventsNotSeen": [ "4", "32423" ], // Требует, чтобы события не были видны игроку. Должна быть строкой, но также может работать как целое число для совместимости с ретро-версиями.
"RecipeKnown": ["Пицца","Бургер выживания"], // Требует, чтобы игрок выучил один из рецептов.
"RequireAllRecipeKnown": false, // Если true, требуется, чтобы игрок изучил все рецепты из списка "RecipeKnown". Значение по умолчанию — false.
"RecipeNotKnown": ["Wild Bait"], // Требует, чтобы рецепты не были изучены игроком.
"KeepValid": false // Если это значение равно true, то после выполнения условий письмо остаётся действительным до прочтения. Значение по умолчанию — false.
    }
]


Чтобы моддер использовал API:
  • КопироватьIMailFrameworkModApiинтерфейс с методом, который вы хотите использовать из интерфейса MFM.
  • КопироватьIПисьмоесли это необходимо для одного из методов.
  • Методы:
    • RegisterContentPack- ИспользоватьHelper.ContentPacks.CreateTemporaryдля загрузки папки из вашего мода, содержащей файл mail.json и, возможно, папку i18n для переводов. Манифест не требуется, так как вы можете использовать этот параметр метода.
    • RegisterLetter- Заполните ILetter необходимыми свойствами. Также требуется условие для регистрации письма. Рекомендуется использовать обратный вызов, чтобы как минимум добавить идентификатор письма в том виде, в котором оно было получено. См. примеры ниже, в разделе "Для моддера, чтобы кодировать с MFM-зависимостью" сессия.
    • GetLetter- Вы получите объект ILetter для идентификатора письма.
    • GetMailDataString- Вы получите строку данных письма для идентификатора письма. Строка данных письма представляет собой переведённый текст и переведённый заголовок с разделителем [#].

Чтобы моддер мог писать код с учетом MFM-зависимости:
  • Добавьте ссылку на MailFrameworkMod.dll в свой проект SMAPI.
    • Вы регистрируете свое письмо с помощью MailRepository.SaveLetter(Letter)
    • В начале каждого дня мод будет проверять письма, достигшие состояния готовности к доставке, и добавлять их в почтовый ящик.
    • Это письмо будет открыто первым, когда игрок проверит почтовый ящик.
    • После вскрытия письмо извлекается из почтового ящика.
    • Условием обратного вызова письма является их вызов.
    • В конце дня письма, оставшиеся в почтовом ящике, будут удалены, поэтому игра их не сохранит.
  • Этот мод можно рассматривать как хранилище ваших писем. Он работает лучше всего, если вы загружаете все письма одновременно с игрой.


Примеры:

Спойлер:
Показывать

Загрузка простого письма, которое будет показано игроку, если оно не прочитано ранее, и не будет доставлено повторно после открытия игроком:
MailRepository.SaveLetter(
новое письмо(
"LetterUniqueId"
,"Пользовательский текст письма."

Лучшие моды для Stardew Valley

Изучите лучшие моды для Stardew Valley, которые добавляют новые функции, улучшенную графику и увлекательные способы преобразить ваш игровой процесс.
Содержание Patcher
Pathoschild27/10/2025 01:17:30
Загружает пакеты контента, которые меняют данные, изображения и карты игры без замены файлов XNB.
SMAPI - API модификации Stardew
Pathoschild15/07/2025 09:52:47
Мод-загрузчик для Stardew Valley.
NPC Карта местоположений
Bouhm22/10/2025 09:39:46
Смотрите NPC и игроков на карте с дополнительной минимальной картой.
Общее меню конфигурации мода
spacechase019/10/2025 03:48:57
Добавляет внутриигровый пользовательский интерфейс для редактирования параметров конфигурации других модов.
SpaceCore компанией
spacechase019/10/2025 22:27:21
Мод фреймворка, используемый некоторыми моими другими модами.
Расширенная долина Stardew
FlashShifter01/07/2025 07:17:39
Stardew Valley Expanded - это расширение для ConcernedApe's Stardew Valley. Этот мод добавляет 28 новых NPC, 58 мест, 278 событий персонажей, 43 рыбы, переосмысленные ванильные районы, три карты фермы, переосмысленную карту мира, отражающую все
Поиск чего угодно
Pathoschild27/10/2025 01:26:29
Смотрите прямую информацию о том, что находится под курсором, когда нажимаете F1. Узнайте любимые подарки деревенца, когда урожай будет готов к сбору урожая, как долго будет длиться забор, почему ваши фермерские животные несчастны и многое другое.
Объекты CJB - нерестилища
Pathoschild28/07/2025 06:24:40
Простое в использовании в игре меню для создания предметов.

Раскройте весь потенциал Stardew Valley с XMODhub — исследуйте эти лучшие моды уже сегодня!

mcafee
Аутентификация
Доверяют 200,000,000+ пользователям

Нужна помощь с загрузкой или установкой? Присоединяйтесь к нашему сообществу Discord для поддержки!

logo
Язык

Игровые решения

Ресурсы

Партнеры

Подписывайтесь на нас

discordfacebooktwitteryoutube
Поддержка:
support@xmodhub.com
Xmod_Lily
Бизнес:
dc@xmodhub.com or cathy@business.xmodhub.com
catherine_79237

Larvas Limited

Room 1201, 12/F Tai Sang Bank Building 130-132 Des Voeux Road Central HK