Anpassung
Jeder Shop wird im Panel eingerichtet und in deiner Datenbank gespeichert — siehe 🏪 Einen Shop erstellen. Die Dateien regeln die gemeinsamen Grundlagen aller Shops.
Welche Datei was bestimmt
Abschnitt betitelt „Welche Datei was bestimmt“| Datei | Was sie bestimmt | Offen? |
|---|---|---|
config.lua | Framework, Sprache, Interaktion, Standard-Ped, Befehl, Bilder, Kategorien, Überfallregeln, Identifier | Ja |
bridge/server.lua | Geld, Konten, Items, Inventar, Jobs, Benachrichtigungen, Callbacks und individueller Polizeialarm | Ja |
bridge/client.lua | Benachrichtigungen, Hilfetexte, Spielerdaten und Callbacks auf dem Client | Ja |
bridge/target.lua | Wie Verkäufer und Shop-Punkte zu ox_target oder qb-target hinzugefügt werden | Ja |
bridge/utils.lua | Liest die Identifier eines Spielers aus (Steam, Lizenz, Discord, FiveM, Xbox) | Ja |
locales/*.lua | Texte im Spiel: Benachrichtigungen, Interaktionshinweise, Überfallnachrichten | Ja |
html/locales.js | Texte in den Panels und im Shop-Fenster für alle zwölf Sprachen | Lesbar |
html/index.html, style.css, script.js | Die Benutzeroberfläche (Panels und Shop-Fenster) | Lesbar |
list/peds.lua | Die im Panel zur Auswahl stehenden Ped-Modelle | Verschlüsselt (Escrow) |
mic_shopcreator.sql | Die neun Datenbanktabellen, einmalig importiert | Ja |
client.lua, server.lua | Shop-Logik | Verschlüsselt (Escrow) |
config.lua
Abschnitt betitelt „config.lua“Allgemein
Abschnitt betitelt „Allgemein“| Option | Was sie macht | Standard |
|---|---|---|
Config.Locale | Sprache im Spiel und in allen Menüs. Siehe Sprachen | 'en' |
Config.Framework | 'esx' oder 'qbcore'. Keine automatische Erkennung. Bei QBox 'qbcore' wählen (Kompatibilitätslayer) | 'esx' |
Config.Command | Befehl zum Öffnen des Shop Creator Panels | 'shopcreator' |
Config.IdentifierType | Wie Besitzer und Mitarbeiter erkannt werden: 'discord', 'license', 'esx' oder 'citizenid'. Siehe Installation | 'discord' |
Verkäufer und Interaktion
Abschnitt betitelt „Verkäufer und Interaktion“| Option | Was sie macht | Standard |
|---|---|---|
Config.Interaction | 'ox_target', 'qb-target' oder 'default' (Hilfetext und Taste E) | 'ox_target' |
Config.RadiusInteract | Bei 'default', maximaler Abstand in Metern für die Interaktion | 2.0 |
Config.SpawnNPC | Bei false spawnen keine NPCs: Ein Marker ('default') oder eine Target-Sphäre markiert den Ort. Ohne Verkäufer ist auch kein Überfall möglich | true |
Config.DefaultPed | Ped-Modell, falls ein Standort keines oder ein ungültiges definiert hat | 'a_f_m_bevhills_01' |
Config.PedSpawnDistance | Verkäufer existieren nur, solange sich ein Spieler innerhalb dieser Reichweite in Metern befindet | 20.0 |
Produkte
Abschnitt betitelt „Produkte“| Option | Was sie macht | Standard |
|---|---|---|
Config.Categories | Beim Anlegen eines Produkts angebotene Kategorien; das Shop-Fenster gruppiert Produkte danach | items, weapons, misc |
Config.InventoryImagePath | Liste an Bilderordnern. Für jedes Produkt wird <item_name>.png nacheinander in den Ordnern gesucht und das erste gefundene Bild genutzt | nui://ox_inventory/web/images/ |
Config.AllowEmployeesAddProducts | Bestimmt bei Spieler-Shops, ob Mitarbeiter neue Produkte hinzufügen dürfen. Besitzer können dies immer | false |
Kein ox_inventory im Einsatz? Trage den Bildpfad deines Inventars in Config.InventoryImagePath ein, z. B. nui://qb-inventory/html/images/. Liegen Bilder in mehreren Ordnern, füge weitere Einträge hinzu.
Überfälle
Abschnitt betitelt „Überfälle“| Option | Was sie macht | Standard |
|---|---|---|
Config.BlacklistWeapons | Gedacht für Waffen, die keinen Überfall starten können. Wird in dieser Version nicht geprüft: Jede Waffe startet einen Überfall, nur Fäuste nicht | weapon_unarmed, weapon_nightstick, weapon_stungun |
Config.RobberyNotifyJobs | Jobs, die bei Überfallbeginn alarmiert werden | police |
Config.PoliceAlert | "default" benachrichtigt obige Jobs mit Meldung und 1-minütigem Blip. "custom" ruft stattdessen TriggerPoliceAlert in bridge/server.lua auf | "default" |
Config.RobberyCooldown | Standard-Cooldown für Shops ohne eigenen Wert. Wird im Code in Minuten gezählt (Kommentar in config.lua nennt irrtümlich Sekunden) | 300 |
Config.TakeRobberyMoneyFromVault | Bei Spieler-Shops stammt das geraubte Geld direkt aus dem Tresor — ist dieser leer, bricht die Geldauszahlung ab | true |
| Option | Was sie macht | Standard |
|---|---|---|
Config.Screenshot | Hängt Screenshots des Spielerbildschirms an Discord-Logs an. Benötigt screenshot-basic | true |
Die Webhook-URL selbst wird pro Shop direkt im Panel festgelegt.
Befehle und Berechtigungen
Abschnitt betitelt „Befehle und Berechtigungen“| Befehl | Wer ihn nutzen darf | Was er macht |
|---|---|---|
/shopcreator | ACE mic_shop.open | Öffnet das Shop Creator Panel. Umbenennbar über Config.Command und in FiveMs Tastenbelegung wie jeder Befehl belegbar |
Shopbesitzer und Mitarbeiter benötigen keine Permission: Öffnen sie einen Shop, den sie besitzen oder in dem sie arbeiten, erscheint ein Zahnrad-Symbol für die Shop-Einstellungen.
Sprachen
Abschnitt betitelt „Sprachen“Zwölf Sprachen werden mitgeliefert: en, es, fr, de, it, pt, ru, ja, ko, zh-CN, ar und nl. Texte liegen an zwei Stellen und richten sich nach Config.Locale:
locales/<code>.lua— Ingame-Texte: Benachrichtigungen, Hinweistexte, Überfallmeldungen.html/locales.js— Texte im Panel und im Einkaufsfenster, jeweils ein Block pro Sprache.
Neue Sprache hinzufügen:
- Kopiere
locales/en.luanachlocales/<code>.luaund übersetze die rechte Seite jeder Zeile. Behalte Schlüssel und%sunverändert bei. - Füge
locales/<code>.luainfxmanifest.luauntershared_scriptshinzu, damit Clients die Datei herunterladen. - Kopiere in
html/locales.jsden'en'-Block, benenne ihn auf dein Sprachkürzel um und übersetze die Werte. - Setze
Config.Localeauf deinen Code, führerefreshaus und starte neu.
Ein fehlender Schlüssel im Lua-File erzeugt im Spiel Translation not found: <key>.
Die Bridge
Abschnitt betitelt „Die Bridge“Vier offene Dateien in bridge/. Ändere keine Funktionsnamen — das Skript ruft sie namentlich auf.
bridge/server.lua — Ein Block für ESX, einer für QBCore, ausgewählt über Config.Framework.
| Funktion | Verwendungszweck |
|---|---|
GetPlayer, GetPlayerJob | Spieler-Objekt und Job |
GetMoney, AddMoney, RemoveMoney | Bargeld |
GetAccount, AddAccountMoney, RemoveAccountMoney | Konten: bank, black_money |
GetInventoryItem, AddInventoryItem, RemoveInventoryItem | Items. Greift bei Ausführung direkt auf ox_inventory zu |
GetPlayerInventory | Inventar des Besitzers beim Befüllen des Shops |
ShowNotification | Serverseitige Benachrichtigungen |
RegisterServerCallback | Callbacks über ESX oder QBCore |
TriggerPoliceAlert(x, y, z, shopLabel) | Wird bei Überfall aufgerufen, wenn Config.PoliceAlert = "custom". Standardmäßig leer — trage deinen Alarm ein |
bridge/client.lua — ShowNotification, ShowHelpNotification, GetPlayerData und TriggerServerCallback. Bei QBCore ist ShowHelpNotification leer; trage hier deinen Help-Text- oder Draw-Text-Aufruf ein, falls du Config.Interaction = 'default' nutzt oder die Mitarbeiter-Einladung sehen möchtest.
bridge/target.lua — Registriert die Option „Shop öffnen“ an jedem Verkäufer (bzw. an einer kleinen Sphäre bei Config.SpawnNPC = false) für ox_target oder qb-target und aktualisiert diese bei Änderungen.
Eigenes Polizei-Dispatch: Setze Config.PoliceAlert = "custom" und implementiere den Aufruf in TriggerPoliceAlert in bridge/server.lua. Die Funktion empfängt Verkäuferkoordinaten und Shop-Namen.
Exports
Abschnitt betitelt „Exports“Client-Exports zum Öffnen von Shops aus anderen Ressourcen:
| Export | Argumente | Was er bewirkt |
|---|---|---|
OpenShop | shop ID, location ID | Öffnet das Shop-Fenster unter Berücksichtigung von Cooldown und Job-Beschränkung |
OpenShopAsEmployee | shop ID, location ID | Identisch zu OpenShop; das Zahnrad für Einstellungen erscheint für Besitzer/Mitarbeiter |
OpenShopAsOwner | — | Öffnet das Shop Creator Panel, sofern der Spieler die Permission mic_shop.open besitzt |
Target-Systeme können auch das Client-Event mic_shopcreator:client:openShop mit shopId und locationId in den Eventdaten aufrufen (entspricht dem Verhalten des internen Targets). IDs sind im Panel ersichtlich.