Главная/Документация/Магазин/Товары/Кастомный-предмет

Кастомный-предмет

Тип товара Кастомный предмет предназначен для пользователей, имеющих опыт в разработке модов для DayZ.

Перед продажей кастомного товара обязательно проверьте его работу на тестовом сервере. Ошибка в моде или обработчике может привести к тому, что товар не будет применён.

Кастомный предмет — это тип товара для опытных пользователей и разработчиков, которым нужно реализовать собственную логику выдачи товара.

Этот тип позволяет создавать товары, которые не поддерживаются стандартной логикой сайта или модификацией DayZShop напрямую.

Настройка типа товара Кастомный предмет
Настройка товара типа Кастомный предмет

Когда использовать кастомный предмет

Кастомный предмет подходит в случаях, когда стандартных типов товара недостаточно.

Не используйте тип Кастомный предмет, если нужную задачу можно решить стандартными типами товара. Стандартные типы проще настраивать, проверять и поддерживать.


Как работает кастомный предмет

Ваш мод добавляет обработчик кастомного товара в DayZShop.

В момент получения кастомного предмета в игре DayZShop вызывает все обработчики кастомных товаров во всех модах, которые их добавили. Каждый обработчик проверяет, может ли он обработать этот предмет, и при возможности выполняет связанное с ним действие, уведомляя DayZShop об успешности обработки товара.

Если хотя бы один из обработчиков сообщает об успехе, то товар считается выданым. Иначе товар не считается выданным и не расходуется.


Настройки типа товара

  1. Идентификатор

    Строка, которая используется обработчиком в вашем моде для определения вида товара.

    Например:

    Message
    

    По этому значению ваш мод понимает, какую именно логику нужно выполнить.

Поле Идентификатор удобно использовать как ключ действия. Например: Message, GivePoints, UnlockFeature, CustomReward.

  1. Содержание

    Произвольная строка с данными товара.

    Это поле можно использовать для передачи дополнительной информации в ваш мод (например, JSON с информацией о товаре).

    Например:

    Спасибо за покупку!
    

Создание мода для обработки кастомного предмета

Для использования типа товара Кастомный предмет необходимо создать собственный мод, который будет интегрироваться с DayZShop.
В созданном моде необходимо создать класс, который будет отвечать за обработку кастомных предметов.
В созданном классе нужно объявить метод экземпляра (нестатический метод) с особой сигнатурой.
Затем Ваш мод должен создавать экземпляр этого класса и подписывать его на событие получения кастомного товара через механизм слабых событий, предоставляемый MagicByteSharedLibrary.
После этого при получении кастомного товара через корзину или код будет вызван метод обработки товара в вашем моде.


Сигнатура метода

Сигнатура метода должна полностью совпадать с указанной.

Если название метода, параметры или тип возвращаемого значения будут отличаться, обработчик не сработает.

В классе, который отвечает за обработку кастомных товаров, необходимо создать метод со следующей сигнатурой:

MBSL_UnmanagedValue<bool> DZS_CustomProduct(PlayerIdentity player, string identifier, string content)

Метод получает три параметра:

  1. player

    Игрок, который использует или получает товар.

  2. identifier

    Значение из поля Идентификатор в настройках товара.

  3. content

    Значение из поля Содержание в настройках товара.

Метод должен возвращать одно из двух значений:

  1. null - если метод не может обработать этот тип товара.
  2. 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;
    }
}

Как создать товар Кастомный предмет

  1. Откройте раздел Товары.
  2. Нажмите Создать товар.
  3. Укажите название товара.
  4. В поле Тип товара выберите Кастомный предмет.
  5. Заполните основную информацию, категорию, сервер и цену.
  6. В блоке Настройки типа товара укажите Идентификатор.
  7. Заполните поле Содержание, если вашему моду нужны дополнительные данные.
  8. Убедитесь, что ваш мод подписан на событие DZS_CustomProduct.
  9. Проверьте обработку товара на тестовой покупке.
  10. Нажмите Сохранить товар.

Пример настройки товара

Если вы хотите, чтобы при покупке пользователь получил сообщение в чат, можно указать:

Идентификатор:

Message

Содержание:

Спасибо за покупку!

После покупки ваш мод получит эти данные и выполнит логику, описанную в обработчике.