Shop-System (cv_shops)¶
NPC-Läden mit Warenkorb, Preisprüfung, optionalem Führerschein-Check und Discord-Logging. Spieler interagieren über E bei NPC-Modellen in der Spielwelt.
Konfiguration¶
Jeder Shop ist ein Eintrag in Config.Shops:
Config.Shops = {
["24/7"] = {
titel = "24/7",
slogan = "Täglich nur für Sie geöffnet!",
blip = { sprite = 52, color = 2, scale = 0.9 },
items = {
["water"] = { itemName = "water", price = 4 },
["sandwich"] = { itemName = "sandwich", price = 9 },
},
npcs = {
{ coords = vector4(x, y, z, heading), model = "mp_m_shopkeep_01", animation = "guard" },
}
},
-- Waffenladen – benötigt Waffenschein
["Ammunition"] = {
titel = "Ammunition",
requiredLicense = "weapon_license", -- Lizenz-Check via gh_license
blip = { sprite = 110, color = 3, scale = 0.8 },
items = { ... },
npcs = { ... },
},
-- Schwarzmarkt – nur Bargeld-Zahlung
["Schwarzmarkt"] = {
payBlack = true, -- nur Cash akzeptiert (kein Bank)
items = { ... },
npcs = { ... },
}
}
Config.Radius = 2.0 -- Interaktionsradius zum NPC in Metern
Vordefinierte Shops¶
| Shop | Blip | Lizenz | Besonderheit |
|---|---|---|---|
| 24/7 | 🟢 Grün | — | Basisgüter, Elektronik |
| Ammunition | 🔵 Blau | weapon_license |
Waffen & Munition |
| Schwarzmarkt | — | — | payBlack = true, kein Blip |
| Baumarkt | 🟡 Gelb | — | Materialien, Werkzeug |
| Weedshop | 🟡 Gelb | — | Baggy |
| Apotheke | 🟢 Grün | — | Medikit |
| Bahama Mamas | 🟣 Lila | — | Bar & Getränke |
| Burgershot | 🔴 Orange | — | Fast Food |
| Diamond Casino | — | — | Alkohol |
| Cat Cafe | 🩷 Pink | — | Cafe & Sushi |
| Rex Diner | 🟠 Orange | — | Diner-Food |
| La Dolce Pizza | 🔴 Rot | — | Pizza & Bier |
| DCA | 🔵 Blau | — | Kennzeichen plate |
| Stadthalle | — | — | plate, contract |
Kauf-Ablauf (Server-seitig)¶
Der Callback cv_shops:serverBuy führt folgende Validierungen durch:
- Charakter-Check — Spieler muss aktiven Charakter haben
- Nähe-Check — Spieler muss ≤ 5 m von einem Shop-NPC entfernt sein
- Lizenz-Check — falls
requiredLicensegesetzt, viagh_license-Export - Item-Validierung — alle Items müssen im Shop konfiguriert sein
- Inventar-Kapazität —
cv.inventory.canAddItem()prüft Gewicht und Slots - Geld-Check — Bank (
payBank = true) oder Bargeld, beipayBlackimmer Cash - Transaktion — Geld abziehen, Items hinzufügen, Discord-Log
Callback¶
-- Client ruft auf:
cv.callback.trigger('cv_shops:serverBuy', false, function(result)
-- result.status: 'success', 'notmoney', 'nospace', 'error'
print(result.message)
end, {
shop = '24/7',
payBank = false, -- true = Bankkonto zahlen
items = {
{ id = 'water', quantity = 2 },
{ id = 'sandwich', quantity = 1 },
}
})
Zahlungsarten¶
| Flag | Quelle |
|---|---|
payBlack = true (Config) |
immer Bargeld (Cash) |
payBank = true (Callback-Daten) |
Bankkonto |
| Standard | Bargeld (Cash) |
Sicherheit & Logging¶
Alle Käufe werden per cv.log mit Kategorie shops in Discord geloggt. Fehlverhalten (außerhalb der Reichweite kaufen, Items die nicht im Shop sind) wird als warning geloggt und der Kauf abgebrochen.