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¶
- Spieler nähert sich NPC → E drücken → NUI öffnet sich
- Fahrzeugauswahl aus Liste (Preis aus
cv_vehicledata) - Optional: Probefahrt (zeitbegrenzt, kein Kauf)
- Kauf: Server prüft Kontostand, zieht Bank-Geld ab
- Persistentes Fahrzeug wird erstellt (
cv.veh.createPersistentVehicle) - Je nach Konfiguration:
- Lieferung: Fahrzeug erscheint an
delivery.coords - Garage-Lieferung: sofort in Ziel-Garage eingelagert
- 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