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

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

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

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

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

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

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

Затем класс должен подписаться на событие DZS\_CustomProduct через MBSL\_EventManager:

```clike
MBSL_EventSystem.Subscribe(this, "DZS_CustomProduct");
```

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

Ниже представлен пример простого мода-интеграции для того, чтобы напечатать поле "содержание" в чат пользователю при использовании товара с идентификатором Message:

```clike
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;
    }
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://guide-autodonate.magicbyte.ru/magazin/tovary/nastraivaemyi-predmet.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
