DayZмиссияinit.cскрипты

DayZ init.c: полное описание основных функций

Настройка сервера / Todtleben / 2 просмотров

DayZ init.c: полное описание основных функций

init.c - это главный скрипт миссии, который выполняется сервером при запуске и при создании персонажей. Именно здесь чаще всего делают стартовый лут, кастомный спавн и серверную инициализацию.

main()

Функция main() вызывается при запуске миссии.

Типичный пример:

void main()
{
    Hive ce = CreateHive();
    if (ce)
        ce.InitOffline();
}

CreateHive() создает economy-систему, а InitOffline() запускает экономику миссии. Без этого лут, события и часть серверной экономики могут работать неправильно.

CreateCustomMission()

Эта функция возвращает класс миссии.

Mission CreateCustomMission(string path)
{
    return new CustomMission();
}

Если вы создаете свой класс CustomMission, сервер должен вернуть именно его.

class CustomMission: MissionServer

Класс, где обычно переопределяют серверную логику.

class CustomMission: MissionServer
{
    override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
    {
        Entity playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");
        Class.CastTo(m_player, playerEnt);
        GetGame().SelectPlayer(identity, m_player);
        return m_player;
    }

    override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
    {
        player.RemoveAllItems();
        player.GetInventory().CreateInInventory("TShirt_Black");
        player.GetInventory().CreateInInventory("Jeans_Black");
        player.GetInventory().CreateInInventory("AthleticShoes_Black");
    }
}

CreateCharacter()

Отвечает за создание персонажа. Здесь можно изменить позицию спавна, направление, тип персонажа и дополнительные параметры.

Самое важное:

  • identity - игрок;
  • pos - позиция спавна;
  • characterName - модель персонажа;
  • GetGame().CreatePlayer(...) создает персонажа;
  • GetGame().SelectPlayer(...) привязывает игрока к созданному персонажу.

StartingEquipSetup()

Вызывается при выдаче стартового снаряжения.

Здесь обычно делают:

  • удаление стандартных вещей;
  • выдачу одежды;
  • выдачу еды, ножа, карты, бинтов;
  • рандомные наборы;
  • разные наборы для разных сценариев.

GetGame().CreateObject()

Создает объект в мире.

Object obj = GetGame().CreateObject("Apple", "7500 0 7500", false, true);

Для предметов в инвентаре лучше использовать CreateInInventory().

GetInventory().CreateInInventory()

Создает предмет внутри инвентаря игрока или другого предмета.

ItemBase knife = ItemBase.Cast(player.GetInventory().CreateInInventory("KitchenKnife"));

EntityAI и ItemBase

EntityAI - базовый тип для игровых объектов с инвентарем. ItemBase удобен для предметов, у которых можно менять количество, здоровье и другие параметры.

Пример:

ItemBase apple = ItemBase.Cast(player.GetInventory().CreateInInventory("Apple"));
if (apple)
    apple.SetQuantity(100);

Ошибки, которые часто ломают init.c

  • лишняя или пропущенная фигурная скобка;
  • неправильное имя класса предмета;
  • попытка положить большой предмет в маленькую одежду;
  • копирование кода из разных гайдов без объединения классов;
  • несколько CreateCustomMission() в одном файле.

Совет

После каждого изменения init.c проверяйте script.log. Если сервер не стартует после правки, почти всегда причина видна там: строка, класс, ошибка компиляции или неверный тип.

ответов: 0

Ответить

Ответов пока нет. Начните обсуждение.

Добавить ответ

Войдите, чтобы ответить в теме.