Кастомный-предмет
Тип товара Кастомный предмет предназначен для пользователей, имеющих опыт в разработке модов для DayZ.
Перед продажей кастомного товара обязательно проверьте его работу на тестовом сервере. Ошибка в моде или обработчике может привести к тому, что товар не будет применён.
Кастомный предмет — это тип товара для опытных пользователей и разработчиков, которым нужно реализовать собственную логику выдачи товара.
Этот тип позволяет создавать товары, которые не поддерживаются стандартной логикой сайта или модификацией DayZShop напрямую.
Когда использовать кастомный предмет
Кастомный предмет подходит в случаях, когда стандартных типов товара недостаточно.
Не используйте тип Кастомный предмет, если нужную задачу можно решить стандартными типами товара. Стандартные типы проще настраивать, проверять и поддерживать.
Как работает кастомный предмет
Ваш мод добавляет обработчик кастомного товара в DayZShop.
В момент получения кастомного предмета в игре DayZShop вызывает все обработчики кастомных товаров во всех модах, которые их добавили. Каждый обработчик проверяет, может ли он обработать этот предмет, и при возможности выполняет связанное с ним действие, уведомляя DayZShop об успешности обработки товара.
Если хотя бы один из обработчиков сообщает об успехе, то товар считается выданым. Иначе товар не считается выданным и не расходуется.
Настройки типа товара
Идентификатор
Строка, которая используется обработчиком в вашем моде для определения вида товара.
Например:
MessageПо этому значению ваш мод понимает, какую именно логику нужно выполнить.
Поле Идентификатор удобно использовать как ключ действия. Например: Message, GivePoints, UnlockFeature, CustomReward.
Содержание
Произвольная строка с данными товара.
Это поле можно использовать для передачи дополнительной информации в ваш мод (например, JSON с информацией о товаре).
Например:
Спасибо за покупку!
Создание мода для обработки кастомного предмета
Для использования типа товара Кастомный предмет необходимо создать собственный мод, который будет интегрироваться с DayZShop.
В созданном моде необходимо создать класс, который будет отвечать за обработку кастомных предметов.
В созданном классе нужно объявить метод экземпляра (нестатический метод) с особой сигнатурой.
Затем Ваш мод должен создавать экземпляр этого класса и подписывать его на событие получения кастомного товара через механизм слабых событий, предоставляемый MagicByteSharedLibrary.
После этого при получении кастомного товара через корзину или код будет вызван метод обработки товара в вашем моде.
Сигнатура метода
Сигнатура метода должна полностью совпадать с указанной.
Если название метода, параметры или тип возвращаемого значения будут отличаться, обработчик не сработает.
В классе, который отвечает за обработку кастомных товаров, необходимо создать метод со следующей сигнатурой:
MBSL_UnmanagedValue<bool> DZS_CustomProduct(PlayerIdentity player, string identifier, string content)
Метод получает три параметра:
player
Игрок, который использует или получает товар.
identifier
Значение из поля Идентификатор в настройках товара.
content
Значение из поля Содержание в настройках товара.
Метод должен возвращать одно из двух значений:
null- если метод не может обработать этот тип товара.new MBSL_UnmanagedValue(true)- если метод успешно обработал товар.
Подписка на событие
Чтобы класс начал получать событие кастомного товара, его нужно подписать на событие DZS_CustomProduct через статический метод Subscribe класса MBSL_EventSystem.
MBSL_EventSystem.Subscribe(instance, "DZS_CustomProduct");
Пример интеграции
Ниже приведён пример скрипта в простом моде-интеграции.
В этом примере при использовании товара с идентификатором Message пользователю будет отправлено сообщение в чат. Текст сообщения берётся из поля Содержание.
modded class MissionServer
{
protected ref ExampleCustomProductHandler m_CustomProductHandler;
void MissionServer()
{
//При запуске сервера создаём экземпляр класса-обработчика
m_CustomProductHandler = new ExampleCustomProductHandler();
}
}
//Класс-обработчик
class ExampleCustomProductHandler : Managed
{
void ExampleCustomProductHandler()
{
//Класс сам подписывается на событие при создании
MBSL_EventSystem.Subscribe(this, "DZS_CustomProduct");
}
//Метод-обработчик
protected MBSL_UnmanagedValue<bool> DZS_CustomProduct(PlayerIdentity player, string identifier, string content)
{
//Если это известный нам тип товара "Message"
if (identifier == "Message")
{
//Печатаем игроку в чат сообщение
PlayerBase.Cast(player.GetPlayer()).MessageImportant(content);
//И сообщаем DayZShop, что товар обработан
return new MBSL_UnmanagedValue<bool>(true);
}
//Иначе сообщаем DayZShop, что не можем обработать товар
return null;
}
}
Как создать товар Кастомный предмет
- Откройте раздел Товары.
- Нажмите Создать товар.
- Укажите название товара.
- В поле Тип товара выберите Кастомный предмет.
- Заполните основную информацию, категорию, сервер и цену.
- В блоке Настройки типа товара укажите Идентификатор.
- Заполните поле Содержание, если вашему моду нужны дополнительные данные.
- Убедитесь, что ваш мод подписан на событие
DZS_CustomProduct. - Проверьте обработку товара на тестовой покупке.
- Нажмите Сохранить товар.
Пример настройки товара
Если вы хотите, чтобы при покупке пользователь получил сообщение в чат, можно указать:
Идентификатор:
Message
Содержание:
Спасибо за покупку!
После покупки ваш мод получит эти данные и выполнит логику, описанную в обработчике.

