Мастерская тюнинга транспортных средств 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 функция. Обрабатывайте крайние случаи, например частичные сохранения, когда сервер падает во время сессии модификации, что может оставить автомобиль в неконсистентном состоянии. Используйте паттерн транзакции, где оплата обрабатывается и модификация сохраняется в одной атомарной операции базы данных. Если любой шаг неудачен, откатывайте оба, чтобы предотвратить списание денег без получения мода или бесплатную модификацию. Логируйте все модификации с отметками времени и ценами для административного контроля и поддержки возможных откатов при обнаружении эксплойтов.
Незаконные модификации и уличные гонки
Добавьте слой криминального геймплея, реализовав нелегальные модификации, доступные только через подпольные тюнинг-мастерские. Впрыск закиси азота обеспечивает временный прирост скорости, который при чрезмерном использовании может перегреть и повредить двигатель. Замены двигателя, превышающие легальный предел мощности, делают транспортное средство объектом полицейской проверки и конфискации при поимке. Снятые номерные знаки, затемнённые окна сверх разрешённого процента тонировки и гидравлическая подвеска дают полиции законные основания для остановки. Отслеживайте, какие модификации на транспортном средстве считаются нелегальными, и предоставляйте эту информацию полиции через механику осмотра автомобиля. Офицеры могут использовать портативный сканер для проверки статуса модификаций, выявляя нелегальные детали, что ведёт к штрафам или конфискации. Это создаёт динамику «кошки-мышки» между культурой тюнинга и правоохранительными органами, обогащая ролевую экосистему сервера.