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. Если сервер не стартует после правки, почти всегда причина видна там: строка, класс, ошибка компиляции или неверный тип.