Zum Inhalt

Fahrzeughandel (cv_vehicleshop)

Autohaus-System mit NPC-Händlern, Welt-Display-Slots (Fahrzeuge stehen in der Welt), Probefahrt und optionaler Lieferung.


Architektur

cv_vehicleshop
  ├─ Client  – spawnt Display-Fahrzeuge, NPC, Blip, öffnet NUI bei E
  └─ Server  – verarbeitet Kauf, erstellt persistentes Fahrzeug, bucht Geld ab

Konfiguration

Config.VehicleShop = {
    interactDistance       = 2.5,      -- Interaktionsradius zum NPC
    displayStreamDistance  = 110.0,    -- Sichtweite für Ausstellungsfahrzeuge

    testDrive = {
        spawnCoords    = vector4(-888.23, -3207.24, 13.94, 56.99),
        driveTimeSeconds = 45,         -- Probefahrt-Dauer in Sekunden
    },

    factionOwnershipMinRank = 11,  -- Mindestrang für Fraktionskauf

    blip = { sprite = 272, color = 5, scale = 1.25 },

    -- Standardgerage nach Fahrzeugtyp bei Kauf-Lieferung
    garageIntegration = {
        defaultGarageByStorageType = {
            car      = 'wurfelpark',
            truck    = 'ls_airport',
            aircraft = 'ls_airport',
            boat     = 'vespucci_boot',
        }
    },
}

Shop-Definition

Config.VehicleShop.shops = {
    ["pdm"] = {
        label   = 'Premium Deluxe Motorsport',
        limited = false,   -- true = nur bestimmte Slots verfügbar

        npc = {
            model     = 'a_m_y_business_01',
            animation = 'WORLD_HUMAN_CLIPBOARD',
            coords    = vector4(x, y, z, heading),
        },

        -- Fahrzeuge die in der Welt ausgestellt werden (Display-Slots)
        worldDisplaySlots = {
            { coords = vector4(x, y, z, heading) },
            -- ...
        },

        vehicles = {
            { model = 'krieger' },
            { model = 'ignus' },
            -- ...
        },
    },

    -- Händler mit Lieferung
    ["startershop"] = {
        label = 'Billo Fahrzeughandel',
        delivery = {
            coords = vector4(x, y, z, heading),  -- Lieferort
        },
        garageDelivery = { immediate = true },   -- sofort in Garage
        -- ...
    }
}

Vordefinierte Händler

ID Name Besonderheit
pdm Premium Deluxe Motorsport Supersportwagen, Elektro
startershop Billo Fahrzeughandel Günstige Starter-Fahrzeuge, Lieferung
importhandel Import-Handel Custom-Car-Modelle (Addon-Vehicles)

Kauf-Ablauf

  1. Spieler nähert sich NPC → E drücken → NUI öffnet sich
  2. Fahrzeugauswahl aus Liste (Preis aus cv_vehicledata)
  3. Optional: Probefahrt (zeitbegrenzt, kein Kauf)
  4. Kauf: Server prüft Kontostand, zieht Bank-Geld ab
  5. Persistentes Fahrzeug wird erstellt (cv.veh.createPersistentVehicle)
  6. Je nach Konfiguration:
  7. Lieferung: Fahrzeug erscheint an delivery.coords
  8. Garage-Lieferung: sofort in Ziel-Garage eingelagert
  9. Benachrichtigung + Log

Fahrzeugpreise

Preise stammen aus cv_vehicledata:

exports['cv_vehicledata']:GetVehicle('krieger')
-- → { spawnname, brand, display, real, money, type, ... }
--   money = Kaufpreis

Fraktionskauf

Wenn der Spieler mindestens factionOwnershipMinRank (Standard: 11) hat, kann er ein Fahrzeug für die Fraktion kaufen (statt für den persönlichen Charakter). Das Fahrzeug wird dann unter ownerType = 'faction' eingetragen und ist in Fraktions-Garagen sichtbar.


Probefahrt

Config.VehicleShop.testDrive = {
    spawnCoords      = vector4(-888.23, -3207.24, 13.94, 56.99),
    driveTimeSeconds = 45,
}
  • Ein temporäres (nicht-persistentes) Fahrzeug wird gespawnt
  • Countdown in der HUD
  • Nach Ablauf wird das Fahrzeug gelöscht und der Spieler zurückgebracht