Назад к блогу
Tutorial8 мин чтения

Мастерская тюнинга транспортных средств FiveM: правильное скриптование LS Customs

Управляйте полноценным тюнинг-шопом на вашем сервере FiveM. Колёса, улучшения двигателя, покраска и лучшие кастомные скрипты LS Customs для QBCore и ESX.

Agency Scripts

Основатель и ведущий разработчик Agency Scripts

Тюнинг транспортных средств в контексте ролевой игры

Настройка автомобилей , одна из самых популярных функций на любом FiveM ролевом сервере. Игроки вкладывают значительное время и деньги в свои машины, а тюнинг-мастерская даёт им возможность персонализировать транспорт с помощью улучшений производительности, визуальных модификаций, кастомных окрашиваний и запчастей от сторонних производителей. Хорошо продуманная система тюнинга , это не просто меню для доступа к встроенным в GTA функциям модификации транспорта. Это целая экосистема, включающая мастерские, управляемые игроками, ценовые структуры, выступающие в роли экономических поглотителей, таймеры установки, создающие реалистичное время ожидания, и рынок запчастей, где компоненты можно приобрести у разных поставщиков с разным уровнем качества. Тюнинг-мастерская становится социальным центром, где собираются автолюбители, механики строят свою репутацию, а каждое модифицированное транспортное средство рассказывает историю о вкусе и бюджете его владельца.

Понимание нативов модификации транспортных средств GTA

GTA V предоставляет модификации транспортных средств через ряд native функций, которые позволяют применять улучшения к конкретным слотам модификаций. Каждый транспорт имеет набор типов модов, идентифицируемых числовыми индексами: улучшения двигателя используют индекс 11, тормоза , индекс 12, трансмиссия , индекс 13, подвеска , индекс 15, а визуальные части, такие как спойлеры, бамперы и юбки, используют индексы от 0 до 10. The SetVehicleMod native применяет конкретную модификацию из доступных опций для модели автомобиля и типа мода. Не каждый автомобиль поддерживает все категории модификаций, поэтому необходимо проверять доступность с помощью GetNumVehicleMods до предоставления игроку вариантов. Покраски используют отдельные native-функции, такие как SetVehicleColours для основных и вторичных цветов, SetVehicleExtraColours для перламутровых и цвет колес, и SetVehicleCustomPrimaryColour для пользовательских значений RGB:

-- Mod type indices reference
local ModTypes = {
    spoiler = 0,
    front_bumper = 1,
    rear_bumper = 2,
    side_skirt = 3,
    exhaust = 4,
    frame = 5,
    grille = 6,
    hood = 7,
    fender = 8,
    right_fender = 9,
    roof = 10,
    engine = 11,
    brakes = 12,
    transmission = 13,
    horns = 14,
    suspension = 15,
    armor = 16,
    turbo = 18,
    xenon = 22,
    front_wheels = 23,
    back_wheels = 24,
    plate_holder = 25,
    vanity_plates = 26,
    trim = 27,
    ornaments = 28,
    dashboard = 29,
    dial = 30,
    door_speaker = 31,
    seats = 32,
    steering_wheel = 33,
    shifter_leavers = 34,
    plaques = 35,
    speakers = 36,
    trunk = 37,
    hydraulics = 38,
    engine_block = 39,
    air_filter = 40,
    struts = 41,
    arch_cover = 42,
    aerials = 43,
    trim2 = 44,
    tank = 45,
    windows = 46,
    livery = 48,
}

function GetAvailableMods(vehicle, modType)
    local count = GetNumVehicleMods(vehicle, modType)
    local mods = {}
    for i = 0, count - 1 do
        table.insert(mods, {
            index = i,
            label = GetModTextLabel(vehicle, modType, i) or ('Option ' .. (i + 1)),
        })
    end
    return mods
end

Конфигурация тюнинг-мастерской

Настройте расположение тюнинг-шопов с их доступными услугами, множителями цен и категориями модификаций, которые они предлагают. Не каждый магазин должен предлагать все услуги. Высококлассный кастомный магазин в Vinewood может специализироваться на роскошных покрасках и премиальных визуальных модах с более высокими ценами, но лучшим качеством. Уличный гараж в Южном LS может сосредоточиться на доступных запчастях для производительности и базовом кузовном ремонте. Такое различие создаёт причины для игроков посещать разные магазины и поддерживает ролевую идентичность каждого бизнеса. Каждый магазин должен иметь физическое расположение с точкой въезда для автомобиля, камерой для просмотра модификаций и, опционально, интерьер MLO для гаражной среды:

Config.TuningShops = {
    ['benny_motorworks'] = {
        label = "Benny's Original Motor Works",
        coords = vector3(-205.67, -1312.58, 31.30),
        vehicleSpot = vector4(-211.89, -1320.88, 31.09, 178.94),
        camOffset = vector3(0.0, 5.5, 1.5),
        blipSprite = 72,
        categories = {'performance', 'visual', 'paint', 'wheels', 'lights', 'livery'},
        priceMultiplier = 1.0,
        restrictedTo = nil,  -- Open to all
    },
    ['ls_customs'] = {
        label = 'LS Customs - Burton',
        coords = vector3(-347.55, -133.00, 39.01),
        vehicleSpot = vector4(-339.20, -136.73, 39.01, 116.89),
        camOffset = vector3(0.0, 5.0, 1.5),
        blipSprite = 72,
        categories = {'performance', 'visual', 'paint', 'wheels'},
        priceMultiplier = 0.85,
        restrictedTo = nil,
    },
}

Config.ModPrices = {
    engine = {1500, 3500, 6000, 10000},       -- Level 1-4
    brakes = {1000, 2500, 4500, 7500},
    transmission = {1200, 3000, 5500, 9000},
    turbo = {15000},
    suspension = {800, 1500, 2500, 4000},
    armor = {2500, 5000, 10000, 17500, 25000},
    spoiler = 2000,       -- Flat price per option
    front_bumper = 1800,
    rear_bumper = 1500,
    side_skirt = 1200,
    exhaust = 1000,
    hood = 2500,
    roof = 1500,
    paint_standard = 500,
    paint_metallic = 1500,
    paint_custom_rgb = 5000,
    wheels = 3000,
    xenon = 3000,
    livery = 2500,
}

Система предпросмотра транспортных средств в реальном времени

Игроки должны видеть модификации на своём автомобиле перед покупкой. Реализуйте систему живого просмотра, которая временно применяет выбранные модификации к автомобилю во время просмотра опций, затем отменяет все изменения, если игрок отменяет, или применяет только купленные модификации. При входе в меню тюнинга сохраните текущие свойства автомобиля как снимок. При просмотре различных опций временно применяйте каждую модификацию с помощью нативов vehicle mod, чтобы изменения были сразу видны. Если игрок выбирает другую опцию в той же категории, отмените предыдущую временную модификацию перед применением новой. При подтверждении покупки модификация становится постоянной и сохраняется в базе данных автомобиля. При отмене восстановите автомобиль в сохранённое состояние. Разместите камеру игры так, чтобы она вращалась вокруг автомобиля во время просмотра, позволяя игроку вращать вид и осматривать модификации со всех сторон:

local originalMods = {}

function SaveVehicleSnapshot(vehicle)
    originalMods = QBCore.Functions.GetVehicleProperties(vehicle)
end

function PreviewMod(vehicle, modType, modIndex)
    SetVehicleMod(vehicle, modType, modIndex, false)
end

function RevertToSnapshot(vehicle)
    if originalMods then
        QBCore.Functions.SetVehicleProperties(vehicle, originalMods)
    end
end

function SetupTuningCamera(vehicle, shopConfig)
    local coords = GetEntityCoords(vehicle)
    local camCoords = coords + shopConfig.camOffset

    tuningCam = CreateCam('DEFAULT_SCRIPTED_CAMERA', true)
    SetCamCoord(tuningCam, camCoords.x, camCoords.y, camCoords.z)
    PointCamAtEntity(tuningCam, vehicle, 0.0, 0.0, 0.0, true)
    SetCamActive(tuningCam, true)
    RenderScriptCams(true, true, 1000, true, false)
end

Интеграция работы механика

Преобразуйте тюнинг-магазин из автоматизированного меню в бизнес, управляемый игроками, интегрировав его с системой работы механика. Механики на дежурстве могут выполнять модификации транспортных средств для клиентов, создавая сервисное ролевое взаимодействие. Когда клиент привозит свой автомобиль в магазин, он может либо воспользоваться киоском самообслуживания по более высокой цене, либо вызвать механика по сниженной ставке. Механик видит входящие заявки на обслуживание на своем планшете, принимает заказ, обсуждает желаемые модификации с клиентом и выполняет работу. Во время установки проигрывайте соответствующие анимации и эффекты частиц, имитируя работу механика над автомобилем. Добавьте таймеры установки, которые варьируются в зависимости от сложности модификации: замена двигателя занимает несколько минут, покраска , меньше времени. Механики получают комиссию за каждую выполненную работу, что мотивирует их предоставлять качественный сервис и наращивать клиентскую базу. Отслеживайте статистику механиков, такую как общее количество выполненных заказов, рейтинги удовлетворенности клиентов и специализации, чтобы создать систему прогрессии в карьере механика.

Пользовательская система покраски и оберток

Выйдите за рамки стандартной палитры GTA, реализовав систему кастомной покраски с RGB-пикерами цвета, металлическими и матовыми покрытиями, перламутровыми наложениями и кастомными обёртками. NUI-пикер цвета должен отображать полный спектр цветового круга или HSL-ползунок, позволяющий игрокам выбирать любой вообразимый цвет. Применяйте выбранный цвет с помощью SetVehicleCustomPrimaryColour и SetVehicleCustomSecondaryColour с RGB-значениями из пипетки. Для эффектов обёртки используйте систему ливреев транспортных средств в сочетании с заменой текстур для нанесения узоров, текстур карбона или брендированных дизайнов на кузов. Предложите опцию двухцветной покраски, где основные и второстепенные панели кузова могут иметь разные цвета, создавая уникальные цветовые комбинации. Сохраняйте точные RGB-значения в записи базы данных транспортного средства, чтобы пользовательские цвета сохранялись между сессиями и перезапусками сервера. Оценивайте кастомные покраски выше стандартных цветов, чтобы отразить премиальный характер услуги и обеспечить эффективный слив денег.

Настройка производительности и тестирование на динамометрическом стенде

Модификации производительности требуют более глубокого подхода, чем просто выбор опции в меню и мгновенный результат. Реализуйте функцию динамометрического тестирования, где игроки могут проверить характеристики производительности своего автомобиля до и после модификаций. Динамо-тест имитирует работу автомобиля на полной мощности и отображает такие показатели, как предполагаемая мощность, крутящий момент, максимальная скорость и время разгона. Используйте данные управления транспортным средством из игры для расчёта этих значений на основе установленных модификаций. Отображайте результаты в чистом NUI-дашборде, который сравнивает значения до и после с помощью столбчатых диаграмм или числовых показателей. Это даёт игрокам конкретную обратную связь о том, как каждое улучшение влияет на производительность их автомобиля, делая решение о покупке более обоснованным и удовлетворительным. Для дополнительного уровня реализма реализуйте систему настройки чипа или перепрошивки ECU, где игроки могут точно настраивать параметры, такие как отклик дросселя, передаточные числа и баланс тормозов через интерфейс с ползунками, при этом изменения отражаются в реальных характеристиках управления транспортным средством с использованием SetVehicleHandlingFloat natives.

Сохранение и сохранение модификаций транспортных средств

Каждая модификация, применённая к транспортному средству игрока, должна сохраняться в базе данных, чтобы сохраняться между сессиями. Большинство фреймворков FiveM хранят свойства транспорта как JSON blob в таблице транспортных средств игрока. Когда модификация применяется и оплачивается, обновляйте сохранённые свойства транспорта новыми значениями модов. При спавне транспорта из гаража применяйте все сохранённые модификации с помощью фреймворка SetVehicleProperties функция. Обрабатывайте крайние случаи, например частичные сохранения, когда сервер падает во время сессии модификации, что может оставить автомобиль в неконсистентном состоянии. Используйте паттерн транзакции, где оплата обрабатывается и модификация сохраняется в одной атомарной операции базы данных. Если любой шаг неудачен, откатывайте оба, чтобы предотвратить списание денег без получения мода или бесплатную модификацию. Логируйте все модификации с отметками времени и ценами для административного контроля и поддержки возможных откатов при обнаружении эксплойтов.

Незаконные модификации и уличные гонки

Добавьте слой криминального геймплея, реализовав нелегальные модификации, доступные только через подпольные тюнинг-мастерские. Впрыск закиси азота обеспечивает временный прирост скорости, который при чрезмерном использовании может перегреть и повредить двигатель. Замены двигателя, превышающие легальный предел мощности, делают транспортное средство объектом полицейской проверки и конфискации при поимке. Снятые номерные знаки, затемнённые окна сверх разрешённого процента тонировки и гидравлическая подвеска дают полиции законные основания для остановки. Отслеживайте, какие модификации на транспортном средстве считаются нелегальными, и предоставляйте эту информацию полиции через механику осмотра автомобиля. Офицеры могут использовать портативный сканер для проверки статуса модификаций, выявляя нелегальные детали, что ведёт к штрафам или конфискации. Это создаёт динамику «кошки-мышки» между культурой тюнинга и правоохранительными органами, обогащая ролевую экосистему сервера.

Готовы начать?

Возьмите скрипты в нашем магазине или заходите в Discord за поддержкой, обновлениями и анонсами.