Zurück zum Blog
Tutorial8 Min. Lesezeit

FiveM-Tuningwerkstatt: LS Customs richtig skripten

Betreibe eine richtige Tuningwerkstatt auf deinem FiveM-Server. Felgen, Motorverbesserungen, Lackierungen und Top-Skripte für LS Customs mit QBCore und ESX.

Agency Scripts

Gründer und leitender Entwickler bei Agency Scripts

Fahrzeugtuning im Roleplay-Kontext

Fahrzeuganpassungen gehören zu den beliebtesten Features auf jedem FiveM-Roleplay-Server. Spieler investieren viel Zeit und Geld in ihre Autos. Eine Tuningwerkstatt gibt ihnen die Möglichkeit, ihre Fahrzeuge mit Leistungsverbesserungen, optischen Modifikationen, individuellen Lackierungen und Zubehörteilen zu personalisieren. Ein gut durchdachtes Tuningsystem bietet mehr, als nur die integrierten GTA-Fahrzeugmodifikationsfunktionen über ein Menü zugänglich zu machen. Es schafft ein ganzes Ökosystem mit von Spielern betriebenen Werkstätten, Preisstrukturen, die Geld aus der Wirtschaft nehmen, Installationszeiten für realistische Wartezeiten und einem Teilemarkt, auf dem Komponenten von verschiedenen Anbietern in unterschiedlichen Qualitätsstufen bezogen werden können. Die Tuningwerkstatt wird zu einem sozialen Treffpunkt, an dem sich Autoliebhaber versammeln, Mechaniker ihren Ruf aufbauen und jedes modifizierte Fahrzeug eine Geschichte über den Geschmack und das Budget seines Besitzers erzählt.

GTA-Funktionen für Fahrzeugmodifikationen verstehen

GTA V stellt Fahrzeugmodifikationen über eine Reihe nativer Funktionen bereit, mit denen du Upgrades auf bestimmte Modifikationsslots anwenden kannst. Jedes Fahrzeug verfügt über verschiedene Mod-Typen, die durch numerische Indizes gekennzeichnet sind: Motor-Upgrades verwenden Index 11, Bremsen Index 12, Getriebe Index 13, Fahrwerk Index 15 und optische Teile wie Spoiler, Stoßfänger und Seitenschweller verwenden die Indizes 0 bis 10. Die SetVehicleMod native Funktion wendet eine bestimmte Modifikation aus den für das jeweilige Fahrzeugmodell und den Mod-Typ verfügbaren Optionen an. Nicht jedes Fahrzeug unterstützt alle Modifikationskategorien. Prüfe daher die Verfügbarkeit mit GetNumVehicleMods bevor du dem Spieler Optionen anzeigst. Lackierungen verwenden separate native Funktionen wie SetVehicleColours für Primär- und Sekundärfarben, SetVehicleExtraColours für Perlglanz- und Felgenfarben und SetVehicleCustomPrimaryColour für benutzerdefinierte RGB-Werte:

-- 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

Konfiguration der Tuningwerkstatt

Konfiguriere Standorte von Tuningwerkstätten mit den verfügbaren Dienstleistungen, Preisaufschlägen und angebotenen Modifikationskategorien. Nicht jede Werkstatt muss alle Dienstleistungen anbieten. Eine High-End-Tuningwerkstatt in Vinewood könnte sich auf luxuriöse Lackierungen und hochwertige optische Mods spezialisieren, mit höheren Preisen, aber besserer Qualität. Eine Straßenwerkstatt in South LS könnte sich auf günstige Leistungsteile und einfache Karosseriearbeiten konzentrieren. Diese Unterschiede schaffen Gründe für Spieler, verschiedene Werkstätten aufzusuchen, und unterstützen die Roleplay-Identität jedes Betriebs. Jede Werkstatt braucht einen Standort mit einer Einfahrt, über die der Spieler sein Fahrzeug hineinfahren kann, eine Kameraposition für die Vorschau der Modifikationen und optional ein Interior-MLO für die Garagenumgebung:

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,
}

Echtzeit-Vorschau für Fahrzeuge

Spieler müssen die Modifikationen an ihrem Fahrzeug sehen können, bevor sie sich für einen Kauf entscheiden. Implementiere ein Live-Vorschausystem, das die ausgewählten Modifikationen vorübergehend auf das Fahrzeug anwendet, während der Spieler die Optionen durchstöbert. Wenn der Spieler abbricht, setze alle Änderungen zurück und wende nur die gekauften Modifikationen dauerhaft an. Wenn der Spieler das Tuningmenü öffnet, speichere die aktuellen Fahrzeugeigenschaften als Schnappschuss. Während der Spieler verschiedene Optionen durchstöbert, wende jede Modifikation mithilfe der nativen Fahrzeug-Mod-Funktionen vorübergehend an, damit die Änderung sofort sichtbar ist. Wählt der Spieler eine andere Option in derselben Kategorie, setze zuerst die vorherige temporäre Modifikation zurück und wende dann die neue an. Bestätigt der Spieler den Kauf, wird die Modifikation dauerhaft und in der Datenbank des Fahrzeugs gespeichert. Bricht der Spieler ab, stelle den gespeicherten Schnappschuss des Fahrzeugs wieder her. Positioniere die Spielkamera während der Vorschau so, dass sie das Fahrzeug umkreist. So kann der Spieler die Ansicht drehen und die Modifikationen aus jedem Winkel überprüfen:

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

Integration in den Mechanikerjob

Mach aus der Tuningwerkstatt durch die Integration in ein Mechaniker-Jobsystem ein von Spielern betriebenes Geschäft statt eines automatisierten Menüs. Mechaniker im Dienst können für Kunden Fahrzeugmodifikationen durchführen und so eine serviceorientierte Roleplay-Interaktion schaffen. Wenn ein Kunde sein Fahrzeug in die Werkstatt bringt, kann er entweder einen Selbstbedienungskiosk zu einem höheren Preis nutzen oder einen Mechaniker zu einem vergünstigten Preis anfragen. Der Mechaniker sieht eingehende Serviceanfragen auf seinem Tablet, nimmt den Auftrag an, bespricht die gewünschten Modifikationen mit dem Kunden und führt die Arbeiten durch. Spiele während der Installation passende Animationen und Partikeleffekte ab, um die Arbeit des Mechanikers am Fahrzeug zu simulieren. Füge Installationszeiten hinzu, die je nach Komplexität der Modifikation variieren. Ein Motortausch dauert mehrere Minuten, eine Lackierung weniger lang. Mechaniker erhalten für jeden abgeschlossenen Auftrag eine Provision. Das motiviert sie, guten Service zu bieten und sich einen Kundenstamm aufzubauen. Erfasse Statistiken zu Mechanikern, etwa die Gesamtzahl der abgeschlossenen Aufträge, Kundenzufriedenheitsbewertungen und Fachgebiete, um ein Fortschrittssystem für den Mechanikerberuf zu schaffen.

System für individuelle Lackierungen und Folierungen

Gehe über die Standard-Farbpalette von GTA hinaus und implementiere ein individuelles Lacksystem mit RGB-Farbwählern, Metallic- und Mattlackierungen, Perlglanzüberzügen und individuellen Folierungen. Der NUI-Farbwähler sollte ein vollständiges Farbrad oder einen HSL-Regler anzeigen, mit dem Spieler jede erdenkliche Farbe auswählen können. Wende die ausgewählte Farbe mithilfe von SetVehicleCustomPrimaryColour und SetVehicleCustomSecondaryColour und den RGB-Werten aus dem Farbwahlmenü an. Nutze für Folierungseffekte das Fahrzeug-Livery-System in Kombination mit dem Austausch individueller Texturen, um Muster, Carbonfasern oder gebrandete Designs auf die Karosserie aufzubringen. Biete eine Zweifarben-Lackierung an, bei der die primären und sekundären Karosserieteile unterschiedliche Farben haben können. So entstehen unverwechselbare Farbkombinationen. Speichere die exakten RGB-Werte in der Datenbank des Fahrzeugs, damit individuelle Farben über Sitzungen und Serverneustarts hinweg erhalten bleiben. Lege die Preise für individuelle Lackierungen höher als für Standardfarben fest, um den Premiumcharakter des Services widerzuspiegeln und der Wirtschaft effektiv Geld zu entziehen.

Leistungstuning und Prüfstandtests

Leistungsmodifikationen sollten mehr bieten, als nur eine Menüoption auszuwählen und sofortige Ergebnisse zu erhalten. Implementiere eine Prüfstandsfunktion, mit der Spieler die Leistungswerte ihres Fahrzeugs vor und nach Modifikationen testen können. Der Prüfstandtest simuliert das Fahrzeug bei Vollgas und zeigt Kennzahlen wie geschätzte PS, Drehmoment, Höchstgeschwindigkeit und Beschleunigungszeit an. Nutze die Handling-Daten des Spiels, um diese Werte anhand der installierten Modifikationen zu berechnen. Zeige die Ergebnisse in einem übersichtlichen NUI-Dashboard an, das Vorher- und Nachher-Werte mit Balkendiagrammen oder Zahlenwerten vergleicht. So sehen Spieler konkret, wie sich jedes Upgrade auf die Leistung ihres Fahrzeugs auswirkt, und können fundierter und zufriedener über den Kauf entscheiden. Für noch mehr Realismus kannst du ein Tuning-Chip- oder ECU-Remapping-System implementieren, mit dem Spieler Parameter wie Gasannahme, Übersetzungsverhältnisse und Bremsbalance über Regler feinabstimmen können. Die Änderungen wirken sich dann über SetVehicleHandlingFloat Funktionen auf das tatsächliche Fahrverhalten des Fahrzeugs aus.

Speichern und dauerhafte Übernahme von Fahrzeugmodifikationen

Jede Modifikation an einem Fahrzeug eines Spielers muss in der Datenbank gespeichert werden, damit sie zwischen Sitzungen erhalten bleibt. Die meisten FiveM-Frameworks speichern Fahrzeugeigenschaften als JSON-Blob in der Fahrzeugtabelle der Spieler. Wird eine Modifikation angewendet und bezahlt, aktualisiere die gespeicherten Fahrzeugeigenschaften mit den neuen Mod-Werten. Wenn das Fahrzeug aus der Garage ausgeparkt wird, wende alle gespeicherten Modifikationen mit der Framework- SetVehicleProperties -Funktion an. Berücksichtige Sonderfälle wie unvollständige Speichervorgänge, wenn der Server während einer Modifikationssitzung abstürzt und das Fahrzeug dadurch in einem inkonsistenten Zustand zurückbleiben könnte. Verwende ein Transaktionsmuster, bei dem die Zahlung verarbeitet und die Modifikation in einem einzigen atomaren Datenbankvorgang gespeichert wird. Schlägt einer der Schritte fehl, rolle beide zurück, damit dem Spieler weder Geld abgebucht wird, ohne dass er das Mod erhält, noch eine kostenlose Modifikation gewährt wird. Protokolliere alle Modifikationen mit Zeitstempeln und Preisen, damit Admins sie überprüfen und mögliche Rollbacks durchführen können, falls Exploits entdeckt werden.

Illegale Modifikationen und Straßenrennen

Füge eine weitere Ebene kriminellen Gameplays hinzu, indem du illegale Modifikationen einführst, die nur in Untergrund-Tuningwerkstätten verfügbar sind. Eine Lachgaseinspritzung sorgt vorübergehend für mehr Geschwindigkeit, kann den Motor bei übermäßigem Einsatz aber überhitzen und beschädigen. Motortausch-Upgrades, die die legale PS-Grenze überschreiten, machen das Fahrzeug bei einer Kontrolle durch die Polizei beschlagnahmungsgefährdet. Entfernte Kennzeichen, getönte Scheiben mit einem Tönungsgrad über dem erlaubten Grenzwert und hydraulische Fahrwerksmodifikationen geben der Polizei jeweils einen begründeten Anlass für eine Verkehrskontrolle. Erfasse, welche Modifikationen an einem Fahrzeug als illegal eingestuft sind, und stelle diese Informationen der Polizei über eine Fahrzeugkontrolle zur Verfügung. Beamte können mit einem Handscanner den Modifikationsstatus eines Fahrzeugs überprüfen und so illegale Teile aufdecken, die ein Bußgeld oder eine Beschlagnahmung rechtfertigen. So entsteht ein Katz-und-Maus-Spiel zwischen Tuningkultur und Strafverfolgung, das die Roleplay-Welt des Servers bereichert.

Das passende Script

Fertig für deinen Server, Updates inklusive.

Bereit loszulegen?

Hol dir die Scripts in unserem Shop, oder komm auf den Discord für Support, Updates und einen Blick auf das, was kommt.