Page cover

☑️Настраиваемый предмет

Данный тип предметов предназначен для опытных пользователей.

Настраиваемый товар позволяет добавлять товары, не поддерживаемые напрямую сайтом и DayZShop.

Данный тип товара имеет два поля:

  • Идентификатор - строка, которая будет использоваться Вашим модом для определения вида товара.

  • Содержание - строка произвольного содержимого, которую Вы можете использовать для передачи данных о товаре своему моду.

Для использования данного типа товара Вам необходимо создать свой мод, который будет интегрироваться с DayZShop с помощью шаблона слабых событий, предоставляемого MagicByteSharedLibrary. Разберём интеграцию мода на примере ниже.

Сначала необходимо в классе, который будет отвечать за обработку товаров, создать метод, отвечающий за событие использования кастомного товара. В этом методе Вы обрабатываете кастомные товары. Если товар удалось успешно применить, то метод должен вернуть экземпляр MBSL_UnmanagedValue<bool>, содержащий значение true. Иначе метод должен вернуть null. Сигнатура метода должна полностью совпадать с указанной ниже:

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

Затем класс должен подписаться на событие DZS_CustomProduct через MBSL_EventManager:

MBSL_EventSystem.Subscribe(this, "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)
    {
        if (identifier == "Message")
        {
            PlayerBase.Cast(player.GetPlayer()).MessageImportant(content);
            return new MBSL_UnmanagedValue<bool>(true);
        }
	return null;
    }
}

Last updated