DayZinit.cспавнкоординаты

DayZ init.c: спавн игроков в определенном месте

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

DayZ init.c: спавн игроков в определенном месте

Иногда нужно, чтобы все игроки появлялись не по стандартным точкам, а в конкретном месте: на базе новичков, у трейдера, в безопасной зоне или на острове.

Простой фиксированный спавн

class CustomMission: MissionServer
{
    override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
    {
        vector spawnPos = "7500 0 7500";

        Entity playerEnt = GetGame().CreatePlayer(identity, characterName, spawnPos, 0, "NONE");
        Class.CastTo(m_player, playerEnt);
        GetGame().SelectPlayer(identity, m_player);
        return m_player;
    }
}

Вектор записывается в формате:

X Y Z

Чаще всего Y можно оставить 0, игра сама поставит персонажа на землю.

Спавн с направлением

Четвертый параметр в CreatePlayer - направление персонажа.

Entity playerEnt = GetGame().CreatePlayer(identity, characterName, spawnPos, 90, "NONE");

90 повернет игрока в сторону выбранного направления.

Несколько точек и случайный выбор

vector GetRandomSpawnPoint()
{
    ref array<vector> points = {
        "7500 0 7500",
        "7600 0 7450",
        "7420 0 7525"
    };

    return points.GetRandomElement();
}

Использование:

vector spawnPos = GetRandomSpawnPoint();
Entity playerEnt = GetGame().CreatePlayer(identity, characterName, spawnPos, 0, "NONE");

Что важно проверить

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

Практичный вариант

Для PvE-сервера удобно делать несколько точек вокруг стартовой зоны. Игроки будут появляться рядом, но не в одной точке друг на друге. Для PvP лучше не делать один общий спавн, иначе место быстро превратится в ловушку.

ответов: 0

Ответить

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

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

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