# Выдача предметов

<figure><img src="/files/RJm34U5qu8UjxU6WrV3x" alt=""><figcaption></figcaption></figure>

**Выдача предметов** - обычные предметы, которые имеют класснеймы.

**Куда выдавать** - вы можете указать куда выдать предмет инвентарь или на землю. Если в инвентаре не будет места, мод проинформирует о данной ошибке.

{% hint style="warning" %}
Не пытайтесь положить машину в человека
{% endhint %}

**className предмета** - предмет который должен будет появится (соблюдайте регистры предмета)

{% hint style="info" %}
Верхний и нижний регистр. Верхним регистром называют Заглавные буквы (большие буквы), которые мы набираем на клавиатуре с помощью клавиши Shift. Нижним регистром называются прописные буквы (маленькие буквы).
{% endhint %}

**Количество повторов при выдаче** - в каком кол-ве выдать предметы, например если вам нужно выдать сразу 2 или более бочек.

**Количество (в стаке)** - наполненность предмета.

{% hint style="warning" %}
Наполняемость имеют не только стаки предметов. Бинты, аккумуляторы, магазины - все эти предметы имеют наполняемость. Обычно, если у предмета есть полоска наполнения, то этот параметр отвечает за неё.
{% endhint %}

{% hint style="info" %}
Если Вам нужно выдать полностью заполненный предмет, указывайте -1.

Если Вам нужно указать заполнения предмета в процентах, то указывайте заполнение как -процент/100 (например, чтобы выдать аккумулятор с 50% заряда, нужно указать -0.5).
{% endhint %}

**Расстояние** - расстояние между этим и предыдущим выданным на землю предметов (имеет значение только для выдаваемых на землю предметов).

{% hint style="warning" %}
Если Вы не хотите, чтобы игрока убила машина при ее появлении, укажите хотя бы 10 метров.
{% endhint %}

{% hint style="info" %}
Чтобы выдать кучку предметов на расстоянии от игрока, укажите первому предмету нужное расстояние, а всем последующим - 0.
{% endhint %}

**Повесить** - какие класснеймы нужно "повесить" на предмет. Этого могут быть аттачменты или предметы, создаваемые в инвентаре. Если что-то "повесить" не получится, то выдача товара будет отменена.

{% hint style="warning" %}
Если вы хотите выдать полностью собранную машину, то в этом поле нужно указаться все детали, которые нужно повесить на неё. После указания детали нажимайте Enter.
{% endhint %}

**Позиция в игре** - вы можете указать позицию, в которой можно получить товара (их может быть несколько).

Указывается координата (точка) и радиус, в этом радиусе будет возможность получить данный товар.

{% hint style="warning" %}
Радиус вокруг точки не учитывает высоту.
{% endhint %}

{% hint style="info" %}
Предполагалось что проекты хотели бы ограничить получение доната только на сейф зоне.

Можно сделать появление машин только на заправках.

К этой настройки вы можете привлечь свою фантазию.
{% endhint %}

**Вид проверки для товаров, выдаваемых на землю** - параметр определяет, каким образом мод проверяет, можно ли товар, выдаваемый на землю, создать в соответствующем месте:

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

{% hint style="warning" %}
Мод проверяет место, в котором будет выдан предмет, а не в котором находится игрок. Это значит, что игрок вполне может получить товар на крыше и, если выдаваемый на землю предмет окажется на земле из-за параметра "расстояние", то товар будет успешно выдан.
{% endhint %}

<details>

<summary><strong>Как настроить свою проверку?</strong></summary>

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

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

```clike
MBSL_UnmanagedValue<bool> DeferredGroundCheck(vector position)
```

Затем класс должен подписаться на событие DeferredGroundCheck в пространстве имён DayZShop через MBSL\_EventSystem:

```clike
MBSL_EventSystem.Subscribe(this, "DeferredGroundCheck", "DayZShop");
```

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

ВАЖНО: Передаваемая позиция всегда находится на одной высоте с игроком. Из-за этого позиция может оказаться под землёй или в воздухе. Объект при этом будет создан с помощью метода GetGame().CreateObjectEx с флагом ECE\_TRACE - т.е. он будет создан на земле/поверхности, если позиция под землёй или в воздухе.

Ниже представлен пример простого мода-интеграции для того, чтобы проверить, что высота переданной позиции не меньше 10:

```clike
modded class MissionServer
{
    protected ref ExampleGroundCheck m_ExampleGroundCheck;
    
    void MissionServer()
    {
        m_ExampleGroundCheck = new ExampleGroundCheck();
    }
}

class ExampleGroundCheck: Managed
{
    void ExampleGroundCheck()
    {
        MBSL_EventSystem.Subscribe(this, "DeferredGroundCheck", "DayZShop");
    }
    
    protected MBSL_UnmanagedValue<bool> DeferredGroundCheck(vector position)
    {
        return new MBSL_UnmanagedValue<bool>(position[1] >= 10);
    }
}
```

</details>

Если даже наша информация не помогла вам получить понимание как это работает.\
Вы можете использовать готовый шаблон товара и посмотреть его настройку.

{% content-ref url="/pages/jA4tdhsgDBmKiY3w24Y2" %}
[Шаблоны товаров](/magazin/shablony-tovarov.md)
{% endcontent-ref %}


---

# 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/vydacha-predmetov.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.
