Nebula Store

Dokumentation

Offizielle Installations- und Konfigurationsanleitung für die aktuell erhältlichen Nebula Scripts: nebula_core, nebula_fuel, nebula_pricechecker und nebula_scoreboard.

01 — Produkte

Was ist enthalten?

Der Nebula Store bietet aktuell vier Ressourcen an. nebula_core ist das gemeinsame Fundament, die übrigen drei sind eigenständige Scripts, die sich optional darauf aufsetzen.

Core
nebula_core
Framework-Core: Datenbank, Preis-Engine, Anti-Tamper, Logging
Script
nebula_fuel
Tankstellen-System mit Verbrauch, Kanistern & Auto-Discovery
Script
nebula_pricechecker
Marktpreis-Anzeige mit dynamischen Preisen & Trend-Pfeilen
Script
nebula_scoreboard
Scoreboard mit Dienst-Status, Server-Stats & Wanted-Anzeige
Auto-Detection: nebula_core, nebula_fuel und nebula_pricechecker erkennen Framework (ESX / QBCore / QBox / Standalone) und Inventory (ox_inventory / qs-inventory / qb-inventory / codem-inventory) automatisch. nebula_scoreboard ist reines ESX + oxmysql.

02 — Setup

Voraussetzungen

Je nachdem, welche Scripts du einsetzt, brauchst du unterschiedliche Abhängigkeiten. Die folgende Tabelle zeigt, welches Script was voraussetzt.

RessourceZweckBenötigt von
oxmysqlDatenbankanbindungnebula_core, nebula_scoreboard
es_extendedESX Framework — Geld, Inventar, Playernebula_scoreboard (Pflicht), core/fuel/pricechecker (eine von mehreren Optionen)
qb-coreQBCore Framework — Alternative zu ESXcore/fuel/pricechecker (optional)
qbx_coreQBox Framework — weitere Alternativecore/fuel/pricechecker (optional)
ox_coreox_core Framework — weitere Alternativenebula_core (optional)
ox_inventoryInventarsystem (wird bevorzugt erkannt)fuel/pricechecker (optional)
qs-inventory / qb-inventory / codem-inventoryAlternative Inventarsystemefuel/pricechecker (optional)
nebula_notifyInteraktionshinweise & Benachrichtigungenfuel (Dependency), pricechecker (optional mit Fallback)
nebula_scoreboard läuft nur mit ESX + oxmysql — es gibt aktuell keine QBCore-Variante. Alle anderen Scripts erkennen ihr Framework automatisch anhand der laufenden Ressourcen (Priorität: QBox › ESX › QBCore › ox_core › Standalone).
nebula_pricechecker fällt automatisch auf die native GTA-Hilfe zurück, falls nebula_notify nicht gestartet ist (Config.UseNebulaNotify). nebula_fuel deklariert nebula_notify dagegen als feste Dependency in seiner fxmanifest.lua.
03 — Reihenfolge

Startreihenfolge

nebula_core sollte immer zuerst starten, danach die Datenbank/Framework-Abhängigkeiten der jeweiligen Scripts.

oxmysql
Framework (ESX / QBCore / ...)
nebula_core
nebula_notify
nebula_fuel / nebula_pricechecker
server.cfg
# Datenbank & Framework (nur das, was du verwendest)
ensure oxmysql
ensure es_extended          # oder qb-core / qbx_core

# Optional: ox_inventory, qs-inventory, etc.
ensure ox_inventory

# Nebula Core zuerst
ensure nebula_core
ensure nebula_notify

# Danach die gewünschten Scripts
ensure nebula_fuel
ensure nebula_pricechecker
ensure nebula_scoreboard   # unabhängig, braucht nur ESX + oxmysql
nebula_scoreboard hat keine Dependency auf nebula_core — es kann unabhängig von den anderen Scripts betrieben werden.

Installation

nebula_core

v1.0.0ESX / QBCore / QBox / ox_core

Das Fundament des Nebula-Ökosystems. Verwaltet die Datenbank, die dynamische Preis-Engine, ein mehrstufiges Anti-Tamper-System (Registry, Heartbeat, Crypto-Challenge) und stellt Exports für alle anderen Nebula-Scripts bereit.

Installation

1
Ordner platzieren
Den Ordner nebula_core in dein /resources/ Verzeichnis verschieben. Empfohlen: Unterordner [nebula].
Struktur
/resources/[nebula]/nebula_core/
├── config.lua
├── fxmanifest.lua
├── migration_fix_shopid.sql
├── server/
│   ├── adapters.lua    ← Framework/Inventory Auto-Detection
│   ├── db.lua          ← Database layer
│   ├── logger.lua      ← Discord Webhook Logging
│   ├── pricing.lua     ← Dynamische Preis-Engine
│   ├── registry.lua    ← Anti-Tamper: erlaubte Resourcen
│   ├── challenge.lua   ← Crypto-Challenge (Heartbeat)
│   ├── banner.lua
│   ├── admin.lua
│   ├── utils.lua
│   └── main.lua
└── shared/
    └── api.lua         ← Event-Namen für andere Scripts
2
Anti-Tamper konfigurieren
In config.lua unter NebulaCore.Bundle.AllowedScripts stehen alle Resourcen, die sich mit dem Core verbinden dürfen. Eigene Erweiterungen musst du hier eintragen, sonst schlägt die Crypto-Challenge fehl.
StrictMode = true lehnt unbekannte Resourcen ab. Zum Testen von Custom-Erweiterungen temporär auf false setzen.
3
server.cfg eintragen
server.cfg
ensure nebula_core
Installation

nebula_fuel

v1.2.0ESX / QBCore / QBox / Standalone

Tankstellen-System mit realistischem Verbrauch basierend auf Drehzahl und Geschwindigkeit, Kanister-Mechanik und automatischer Erkennung von Zapfsäulen — auch bei eigenen MLOs, ohne manuelle Konfiguration.

Features

BereichBeschreibung
Auto-DetectionErkennt Framework (ESX/QBCore/QBox/Standalone) und Inventory (ox_inventory, qb-inventory, qs-inventory, codem-inventory) automatisch
VerbrauchRealistischer Verbrauch abhängig von Drehzahl & Speed, Motor schaltet bei leerem Tank ab
KanisterLeer kaufen, an der Zapfsäule befüllen, am Fahrzeug benutzen
Tankstellen22 vordefinierte Tankstellen, zusätzliche MLO/Custom-Pumpen werden per Prop-Scan automatisch erkannt
SprachenDeutsch & Englisch, leicht erweiterbar
Anti-CheatServer-seitige Distanz- und Plausibilitätsprüfung beim Bezahlen

Installation

1
Ordner platzieren
Ordner nebula_fuel nach /resources/[nebula]/ verschieben.
2
Items registrieren
Zwei Items werden benötigt: jerrycan_empty und jerrycan_full. Bei ox_inventory ist jerrycan_full als usable Item mit Export nebula_fuel.useJerryCan zu hinterlegen, bei QBCore/QBox wird das usable Item automatisch beim Start registriert.
3
server.cfg eintragen & neustarten
server.cfg
ensure nebula_fuel
Nach dem Start zeigt die Konsole: [nebula_fuel] loaded | Framework: esx | Inventory: ox_inventory | Pump-Models: 8

Neue Tankstellen bekannt machen

Der Server akzeptiert Tankvorgänge nur an Stationen, die er kennt (Config.StaticStations oder zur Laufzeit synchronisiert). Bei einer neuen MLO-Tankstelle: hinfahren, im Chat /fuelsync eingeben — der Client meldet alle sichtbaren Zapfsäulen an den Server, neue werden übernommen und bei Config.SyncCommand.persist = true dauerhaft gespeichert. Zurücksetzen per Konsole: fuelsync_clear.

Konfiguration

VariableBeschreibung
Config.PricePerLiterPreis pro Liter
Config.JerryCanPrice / JerryCanFillPricePreis für leeren Kanister / Befüllen
Config.TankSizesTankgröße pro GTA-Fahrzeugklasse
Config.ConsumptionEnabledVerbrauchssimulation an/aus
Config.PumpModelsErkannte Zapfsäulen-Props
Config.ServerDistanceCheck / ServerCheckRadiusServer-seitige Distanzprüfung (Standard: 60m)
Config.Framework / Config.InventoryManuelles Override, falls Auto-Detection nicht greift (statt 'auto')

Steuerung

TasteAktion
ETankstelle / Zapfsäule öffnen
ESCMenü schließen
Installation

nebula_pricechecker

v1.0.0Core-gebunden

Zeigt Marktpreise an mehreren Standorten in einer NUI-Oberfläche im Nebula-Design an — mit Trend-Pfeilen, Kategorien und automatischer Preisrotation, die sich stündlich am eingestellten Bereich orientiert.

Features

BereichBeschreibung
Marktplätze4 vorkonfigurierte Standorte (Hauptmarkt, Rohstoffmarkt, Essensmarkt, Metallmarkt), jeweils mit eigenem Item-Filter
KategorienRohstoffe, Essen, Metall, Elektronik, Chemie, Textilien — insgesamt 24 vordefinierte Items mit Basis-, Min- und Max-Preis
Trend-AnzeigePreiskarten zeigen einen Auf-/Ab-Pfeil, sobald sich der Preis um mehr als 6% der Preisspanne verändert hat, Sortierung standardmäßig nach Trend
Inventar-IconsErkennt automatisch ox_inventory, qb-inventory, lj-inventory, qs-inventory, ps-inventory, codem-inventory, origen_inventory, core_inventory, tgiann-inventory für passende Item-Bilder
Notify-FallbackNutzt nebula_notify für Interaktionshinweise, fällt bei Bedarf automatisch auf die native GTA-Hilfe zurück

Installation

1
Ordner platzieren
Ordner nebula_pricechecker nach /resources/[nebula]/ verschieben.
2
Marktplätze & Items in config.lua eintragen
Standorte werden unter Config.Shops definiert (id, label, category, coords, blip), Items unter Config.Items mit basePrice/min/max je Kategorie.
3
server.cfg eintragen
server.cfg
ensure nebula_pricechecker

Konfiguration

VariableBeschreibung
Config.PriceUpdateIntervalSekunden zwischen Preisänderungen (Standard: 3600)
Config.MaxChangePercent / MinChangePercentMax./min. Änderung pro Update als Anteil der Preisspanne (max-min)
Config.UseNebulaNotifyNutzung von nebula_notify für Hinweise/Fehler an/aus
Config.InventoryImgPathManueller Pfad zu Item-Bildern, falls das Inventory nicht automatisch erkannt wird, oder false zum Deaktivieren
Config.ShopsMarktplätze mit Standort, Kategorie-Filter und optionalem Blip
Config.ItemsItem-Liste mit id, name, category, icon, basePrice, min, max

Steuerung

TasteAktion
EMarktpreise am Marker öffnen
Installation

nebula_scoreboard

v1.0.0ESX + oxmysql

Scoreboard mit Server-Stats für ESX. Statt exakter Zahlen pro Kategorie zeigt es je nach Schwellenwert entweder ✓ / ✕ oder die tatsächliche Anzahl an — praktisch, um Diensthabende sichtbar zu machen, ohne genaue Personalstärken preiszugeben.

Anzeige-Logik

📊
Pro Kategorie gilt ein Schwellenwert (Config.Thresholds): Wert = 0 → ✕ (rot), 0 < Wert < Threshold → die genaue Zahl, Wert ≥ Threshold → ✓ (grün). Beispiel bei Threshold=10 für Polizei: 0 Polizisten → ✕, 3 Polizisten → 3, 10+ Polizisten → ✓.

Angezeigte Kategorien

IconBedeutung
👮Polizei im Dienst
🚑Sanitäter im Dienst
⚖️Justiz / Richter online
⚖️Anwälte im Dienst
🔧Mechaniker im Dienst
🛡️Gesucht / Wanted (aus user_wanteds)
⚙️Admins online (ESX-Gruppen aus Config.AdminGroups)

Installation

1
Ordner platzieren & Logo ersetzen
Ordner nach /resources/ verschieben, html/logo.png durch dein eigenes Server-Logo ersetzen (empfohlen: ca. 400×140px, transparenter Hintergrund).
2
Jobs & Admin-Gruppen anpassen
In config.lua unter Config.Jobs und Config.AdminGroups deine Job- und Gruppennamen eintragen, ebenso die DB-Tabellen für owned_vehicles / owned_properties / user_wanteds unter Config.DB.
3
server.cfg eintragen
server.cfg
ensure nebula_scoreboard

Steuerung

Taste / BefehlAktion
F10 (Standard)Scoreboard öffnen/schließen — Config.ToggleMode: 'hold' zum Halten oder 'toggle' zum Umschalten
/scoreboardScoreboard per Befehl umschalten
Die Taste lässt sich ingame ändern über ESC → Einstellungen → Tastenbelegung → FiveM → „Scoreboard anzeigen".

API

Exports & API

nebula_core stellt Event-Namen für Preis-Abfragen und Logging bereit, nebula_fuel exportiert Framework/Inventory-Infos für eigene Erweiterungen.

Lua — nebula_core (shared/api.lua)
Nebula.API.GetPrice  = 'nebula_core:getPrice'
Nebula.API.CalcPrice = 'nebula_core:calcPrice'
Nebula.API.Log       = 'nebula_core:log'
Lua — nebula_fuel exports
-- Server-seitig
exports.nebula_fuel:GetFramework()  -- 'esx' / 'qbcore' / 'qbox' / 'standalone'
exports.nebula_fuel:GetInventory()  -- 'ox_inventory' / etc.

-- Client-seitig (wird von ox_inventory als usable Item aufgerufen)
exports.nebula_fuel:useJerryCan(data, slot)

nebula_pricechecker und nebula_scoreboard bieten keine öffentlichen Exports für eigene Erweiterungen — beide sind als eigenständige NUI-Anzeigen konzipiert.

Support

FAQ

Welche Frameworks werden unterstützt?
nebula_core, nebula_fuel und nebula_pricechecker erkennen QBox, ESX, QBCore und ox_core automatisch (Fallback: Standalone). nebula_scoreboard läuft ausschließlich mit ESX + oxmysql.
nebula_fuel oder nebula_pricechecker starten nicht
Beide haben nebula_core und nebula_notify als Dependency in der fxmanifest.lua. Prüfe, ob nebula_core vor dem jeweiligen Script in server.cfg steht und ob nebula_notify läuft. Bei nebula_pricechecker reicht notfalls auch Config.UseNebulaNotify = false.
Neue Tankstelle wird nicht akzeptiert
Der Server kennt nur Stationen aus Config.StaticStations oder zur Laufzeit synchronisierte. Bei der neuen Zapfsäule stehen und /fuelsync im Chat eingeben, oder Koordinaten manuell in Config.StaticStations eintragen.
Warum ändern sich die Preise bei nebula_pricechecker nicht?
Updates laufen alle Config.PriceUpdateInterval Sekunden (Standard: 3600 = 1 Stunde). Zum Testen den Wert in config.lua temporär verkleinern.
Wie erreiche ich den Support?
Über den Discord im #support-Kanal ein Ticket öffnen und das Problem inklusive Konsolen-Screenshot beschreiben.