☑️Настраиваемый предмет
Данный тип предметов предназначен для опытных пользователей.
Настраиваемый товар позволяет добавлять товары, не поддерживаемые напрямую сайтом и 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