Page cover

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

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

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

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

Верхний и нижний регистр. Верхним регистром называют Заглавные буквы (большие буквы), которые мы набираем на клавиатуре с помощью клавиши Shift. Нижним регистром называются прописные буквы (маленькие буквы).

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

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

Если Вам нужно выдать полностью заполненный предмет, указывайте -1.

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

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

Чтобы выдать кучку предметов на расстоянии от игрока, укажите первому предмету нужное расстояние, а всем последующим - 0.

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

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

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

Предполагалось что проекты хотели бы ограничить получение доната только на сейф зоне.

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

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

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

  • Не проверять - мод не будет ничего проверять и всегда будет выдавать товары на землю.

  • Ландшафт - мод выдаст товар на землю, только если он будет выдан на ландшафт. Он не позволит, например, выдать товар на крыше дома или внутри дома.

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

Как настроить свою проверку?

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

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

MBSL_UnmanagedValue<bool> DeferredGroundCheck(vector position)

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

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

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

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

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

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);
    }
}

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

🗃️Шаблоны товаров

Last updated