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

<figure><img src="https://2015836169-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSGdKfYR2XgL945t6coyK%2Fuploads%2FYsmIeRb4j3BJsOgZ0LwH%2Fimage.png?alt=media&#x26;token=16bfc426-3b07-4772-9672-c2b1e07b979d" 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="../shablony-tovarov" %}
[shablony-tovarov](https://guide-autodonate.magicbyte.ru/magazin/shablony-tovarov)
{% endcontent-ref %}
