← Blog

Как настроить сервер FiveM для дрифта

Par Benjamin D. · PDG

· Mis à jour le 10 сентября 2026 г. · Lecture 8 min

Содержание

Дрифт на сервере FiveM — это не просто «поставить машину с занижением». Это связка из трёх слоёв: серверные ресурсы, физика автомобилей в handling.meta и подходящие карты с длинными связками поворотов. Ниже — практический разбор, как всё это собрать, отладить и не уронить производительность игрового процесса на площадке с двадцатью водителями одновременно.



Что нужно для дрифта на сервере FiveM: базовая архитектура

Дрифт-режим в FiveM строится не одним модом, а слоями. Каждый слой можно менять независимо, и это важно: если физика зашита в один ресурс с картами и скриптами, отладка превращается в мучение.

Три слоя дрифт-сборки

  • Физика — ресурс со stream-моделями и data/handling.meta, который перекрывает заводские значения GTA V или добавляет новые handlingName для кастомных машин.
  • Скрипты — счётчик очков дрифта, цветной дым из-под колёс, переключение «drift tuning» на лету, зоны трасс, таблица результатов.
  • Картыymap/ytyp-ресурсы с трассами: горные серпантины, промышленные площадки, парковки.

Порядок загрузки в server.cfg имеет значение: карты и физика поднимаются раньше геймплейных скриптов, иначе счётчик очков может стартовать до того, как модели окажутся в стриме.

# server.cfg — фрагмент запуска дрифт-сборки
ensure drift_vehicles      # модели авто + handling.meta
ensure drift_handling      # перекрытие физики ванильных машин
ensure drift_maps          # ymap-трассы
ensure drift_smoke         # цветной дым покрышек
ensure drift_score         # счётчик очков и лидерборд

set sv_enforceGameBuild 3095
setr onesync on
sv_maxclients 48

Технически всё это крутится на машине с процессором высокой частоты — FiveM однопоточен по основному тику, поэтому частота ядра важнее их количества. Если вы подбираете площадку под дрифт-проект, посмотрите хостинг FiveM на Ryzen с NVMe: стрим тяжёлых карт и десятков моделей авто упирается именно в диск и одиночную производительность ядра.



Настройка физики машин через handling.meta

Файл handling.meta — XML-описание физической модели каждого автомобиля. Один блок <Item type="CHandlingData"> = одна машина, привязка идёт по handlingName, который прописан в vehicles.meta.

Как подключить свой handling к серверу

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

resources/[drift]/drift_handling/
├── fxmanifest.lua
└── data/
    └── handling.meta
-- fxmanifest.lua
fx_version 'cerulean'
game 'gta5'

files {
    'data/handling.meta'
}

data_file 'HANDLING_FILE' 'data/handling.meta'

После загрузки файлов через файловый менеджер панели Pterodactyl достаточно выполнить в живой консоли:

refresh
ensure drift_handling

Полная перезагрузка процесса нужна только при изменении vehicles.meta или добавлении новых моделей в стрим.

Ключевые параметры для управляемого скольжения

ПараметрЧто делаетОриентир для дрифта
fDriveBiasFrontРаспределение тяги. 0.0 — задний привод0.000000
fInitialDriveForceКрутящий момент, «злость» мотора0.28 – 0.40
fDriveInertiaСкорость раскрутки двигателя0.9 – 1.3
fTractionCurveMaxМаксимальное сцепление (продольное)1.8 – 2.2
fTractionCurveMinСцепление при срыве. Разница с Max — «глубина» скольжения1.2 – 1.6
fTractionCurveLateralУгол работы боковой тяги15 – 20
fLowSpeedTractionLossMultСрыв на низкой скорости, старт заноса0.1 – 0.4
fTractionBiasFrontБаланс сцепления между осями0.46 – 0.50
fSteeringLockУгол выворота колёс50 – 65
fHandBrakeForceСила ручника для инициации1.0 – 1.5
fAntiRollBarForceСтабилизаторы, борьба с раскачкой0.2 – 0.5
fSuspensionForceЖёсткость подвески2.0 – 2.8

Рабочий пример блока

<Item type="CHandlingData">
  <handlingName>DRIFT180SX</handlingName>
  <fMass value="1240.000000" />
  <fInitialDragCoeff value="8.500000" />
  <vecCentreOfMassOffset x="0.000000" y="0.050000" z="-0.100000" />
  <vecInertiaMultiplier x="1.000000" y="1.000000" z="1.150000" />
  <fDriveBiasFront value="0.000000" />
  <nInitialDriveGears value="6" />
  <fInitialDriveForce value="0.330000" />
  <fDriveInertia value="1.100000" />
  <fClutchChangeRateScaleUpShift value="3.500000" />
  <fClutchChangeRateScaleDownShift value="3.500000" />
  <fInitialDriveMaxFlatVel value="175.000000" />
  <fBrakeForce value="0.950000" />
  <fBrakeBiasFront value="0.620000" />
  <fHandBrakeForce value="1.250000" />
  <fSteeringLock value="58.000000" />
  <fTractionCurveMax value="2.000000" />
  <fTractionCurveMin value="1.400000" />
  <fTractionCurveLateral value="17.500000" />
  <fLowSpeedTractionLossMult value="0.250000" />
  <fTractionBiasFront value="0.480000" />
  <fTractionLossMult value="1.000000" />
  <fSuspensionForce value="2.400000" />
  <fAntiRollBarForce value="0.350000" />
  <strHandlingFlags>440010</strHandlingFlags>
  <strModelFlags>440010</strModelFlags>
  <strDamageFlags>0</strDamageFlags>
</Item>

Полный перечень полей и их семантика описаны в документации проекта: Source.

Методика подбора значений

  1. Меняйте один параметр за раз и делайте один и тот же тестовый заезд по одному повороту.
  2. Сначала настройте fTractionCurveMax и fTractionCurveMin — это скелет поведения. Слишком большой разрыв даёт «мыло»: машина срывается и не возвращается.
  3. fLowSpeedTractionLossMult отвечает за старт заноса с газа. Значение выше 0.5 превращает выезд с парковки в лотерею.
  4. fSteeringLock ниже 45 не даст поймать угол; выше 70 — руль становится нервным на геймпаде.
  5. Центр масс (vecCentreOfMassOffset по Z) опускайте аккуратно: −0.2 и ниже делает машину «приклеенной» и убивает переброс.

Переключаемый дрифт-режим без правки файлов

Многие проекты дают игроку тумблер «drift tuning» вместо жёсткой физики. Это делается нативами на стороне клиента и не требует перезапуска ресурса:

-- client.lua
local driftOn = false

RegisterCommand('drift', function()
    local veh = GetVehiclePedIsIn(PlayerPedId(), false)
    if veh == 0 then return end
    if not IsVehicleDriveable(veh, false) then return end

    driftOn = not driftOn

    if driftOn then
        SetVehicleHandlingFloat(veh, 'CHandlingData', 'fTractionCurveMin', 1.35)
        SetVehicleHandlingFloat(veh, 'CHandlingData', 'fTractionCurveMax', 1.95)
        SetVehicleHandlingFloat(veh, 'CHandlingData', 'fLowSpeedTractionLossMult', 0.25)
        SetVehicleHandlingFloat(veh, 'CHandlingData', 'fDriveBiasFront', 0.0)
        SetVehicleTyreSmokeColor(veh, 255, 40, 40)
    else
        SetVehicleHandlingFloat(veh, 'CHandlingData', 'fTractionCurveMin', 2.05)
        SetVehicleHandlingFloat(veh, 'CHandlingData', 'fTractionCurveMax', 2.30)
        SetVehicleHandlingFloat(veh, 'CHandlingData', 'fLowSpeedTractionLossMult', 1.0)
        SetVehicleTyreSmokeColor(veh, 255, 255, 255)
    end
end, false)

Важно помнить: изменения через SetVehicleHandlingFloat локальны для клиента. Для соревновательных заездов и лидерборда физику лучше держать серверной и одинаковой для всех — иначе рекорды несопоставимы.

Простой счётчик угла

CreateThread(function()
    while true do
        Wait(50)
        local ped = PlayerPedId()
        local veh = GetVehiclePedIsIn(ped, false)
        if veh ~= 0 then
            local speed = GetEntitySpeed(veh) * 3.6
            local vx, vy = table.unpack(GetEntityVelocity(veh))
            local heading = math.rad(GetEntityHeading(veh))
            local fx, fy = -math.sin(heading), math.cos(heading)
            local dot = (vx * fx + vy * fy)
            local len = math.sqrt(vx * vx + vy * vy)
            if len > 3.0 and speed > 40.0 then
                local angle = math.deg(math.acos(math.max(-1.0, math.min(1.0, dot / len))))
                if angle > 12.0 and angle < 90.0 then
                    -- начисление очков: угол × скорость
                    TriggerEvent('drift:addScore', angle * speed * 0.01)
                end
            end
        end
    end
end)


Дрифт-карты: подбор, установка и стриминг

Ванильная карта Los Santos годится для начала: Vinewood Hills, серпантин Great Ocean Highway, парковки аэропорта и промзона Cypress Flats. Но живому дрифт-проекту нужны выделенные трассы.

Какие трассы работают лучше всего

  • Горный серпантин — длинные связки, отбойники по краям, перепад высот. Хорош для «тандемов».
  • Кольцевая площадка — замкнутый овал с 3–5 поворотами, идеален для тренировок новичков и для замера очков.
  • Гимхана-площадка — конусы, бочки, малый радиус. Тренирует ручник и переброс.
  • Промзона / порт — широкое покрытие, много ориентиров, минимум коллизий, дешёвая для стрима.

Установка карты как ресурса

resources/[maps]/drift_touge/
├── fxmanifest.lua
└── stream/
    ├── touge_main.ymap
    ├── touge_props.ytyp
    └── touge_textures.ytd
-- fxmanifest.lua
fx_version 'cerulean'
game 'gta5'

this_is_a_map 'yes'

files {
    'stream/touge_props.ytyp'
}

data_file 'DLC_ITYP_REQUEST' 'stream/touge_props.ytyp'

Строка this_is_a_map 'yes' обязательна — без неё ymap не подхватится. Папка stream не требует ручного перечисления файлов, движок сканирует её сам.

Типовые проблемы с картами

  • Объекты «плавают» или проваливаются — не подгружен ytyp, проверьте DLC_ITYP_REQUEST.
  • Нет коллизий — отсутствует ybn, машина проезжает отбойники насквозь.
  • Просадки при въезде в зону — слишком много prop'ов в одном LOD-кластере; разбейте карту на несколько ymap.
  • Конфликт двух карт в одной точке — две трассы, размещённые в одинаковых координатах, дают Z-fighting и невидимые стены.

Стриминг и место на диске

Дрифт-проект быстро обрастает контентом: 60–80 машин по 30–60 МБ плюс карты — это десятки гигабайт стрима. Здесь напрямую работает NVMe: время первой загрузки игрока и подгрузка моделей при въезде на трассу зависят от скорости произвольного чтения. Держите каталог [cars] отдельно от [maps], чтобы отключать пачки ресурсов одной строкой в конфигурации.



Производительность, отладка и администрирование дрифт-проекта

Диагностика в консоли

Живая консоль панели даёт всё необходимое без подключения по SSH:

resmon 1          # монитор нагрузки ресурсов (клиент, F8)
profiler record 500
profiler view
status            # список подключённых игроков
restart drift_handling
stop drift_score

Правило простое: любой ресурс, стабильно висящий выше 1.0 ms в resmon, требует внимания. Счётчики очков с циклом Wait(0) — самая частая причина просадок на дрифт-площадках. Замените на Wait(50) и считайте угол реже: разница в точности незаметна, разница в нагрузке — в десятки раз.

Синхронизация и латентность

Тандемы и парные заезды особенно чувствительны к задержке: при 90+ ms партнёр «телепортируется» в повороте. OneSync снижает часть артефактов, но физическая близость игроков к дата-центру решает больше. Для русскоязычной аудитории имеет смысл выбирать площадку в Европе и следить за стабильностью пинга, а не за его минимальным значением.

Что нужно закрыть по администрированию

  • Резервные копии перед каждой правкой физики. Автоматические бэкапы плюс ручной снапшот перед выкаткой новой пачки handling.meta — правило, которое экономит вечер.
  • Раздельные права. Суб-пользователи панели: билдер карт получает доступ к файлам, модератор — только к консоли и рестарту.
  • RCON и txAdmin. Длинный уникальный пароль, разные значения для rcon_password и панели администрирования.
  • Тестовая площадка. Вторая инстанция с копией ресурсов, где обкатываются значения перед выкаткой на основную.
  • Защита от DDoS. Волюметрические атаки на публичные дрифт-площадки — обычная история; фильтрация должна работать на уровне инфраструктуры, а не скриптов.

Чек-лист выкатки новой физики

  1. Снапшот текущего состояния ресурсов.
  2. Правка handling.meta в отдельной ветке файлов.
  3. refresh + restart drift_handling на тестовой инстанции.
  4. Три контрольных заезда: старт с газа, ручник, переброс.
  5. Проверка resmon — нагрузка не выросла.
  6. Выкатка на основную площадку в низкий онлайн, объявление в Discord.

Если вы ведёте несколько проектов параллельно, посмотрите Все наши игровые серверы и материалы в Блог Fly-Serv — многие приёмы по управлению ресурсами и бэкапами переносятся между играми один в один. Про Fly-Serv и панель Pterodactyl стоит знать одно: файловый менеджер и живая консоль закрывают 90% рутины дрифт-администратора без терминала.



Итог

Хорошая дрифт-площадка держится на трёх вещах: аккуратной физике в handling.meta, лёгких скриптах без бесконечных циклов и картах, которые не рушат FPS. Меняйте по одному параметру, тестируйте на одном и том же повороте, делайте снапшот перед каждой выкаткой. Остальное — вопрос времени за рулём и обратной связи от вашего сообщества.



FAQ

Почему изменения в handling.meta не применяются после перезапуска ресурса?

Три частые причины: в fxmanifest.lua отсутствует строка data_file 'HANDLING_FILE' 'data/handling.meta'; значение handlingName не совпадает с тем, что указано в vehicles.meta модели; либо другой ресурс загружается позже и перекрывает ваши значения. Проверьте порядок ensure в конфигурации и выполните refresh перед restart. Для новых моделей нужен полный перезапуск процесса.

Какие параметры быстрее всего дают контролируемый занос?

Начните с fDriveBiasFront = 0.0 (задний привод), затем разведите fTractionCurveMax (около 2.0) и fTractionCurveMin (около 1.4). Далее опустите fLowSpeedTractionLossMult до 0.2–0.3 и поднимите fSteeringLock до 55–60. Эти четыре значения формируют базовое поведение; всё остальное — тонкая доводка под конкретную машину и трассу.

Как избежать просадок FPS при большом количестве машин на трассе?

Ограничьте радиус спавна и количество одновременно активных авто, отключите лишние NPC-траффик-ресурсы в зоне трассы, поднимите интервал Wait() в счётчиках очков до 50 мс. Проверьте нагрузку через resmon 1 и profiler record. Тяжёлые ytd-текстуры в 4K на машинах — вторая по частоте причина; пережатие до 2K обычно проходит незаметно для игроков.