Pepper Game Night
12 Gesellschaftsspiele mit Lobby und KI-Mitspielern an Spieltischen in der Welt, optional um Einsatz, für ESX, QBCore und Qbox.
Überblick
Pepper Game Night bringt 12 Gesellschaftsspiele auf deinen Server: Brett-, Karten-, Würfel- und Party-Spiele mit einer gemeinsamen Lobby und KI-Mitspielern. Gespielt wird an Spieltischen in der Welt oder an einem Tisch aus der Spielebox. Die Spielfigur sitzt am Tisch, das Spiel läuft in einer Oberfläche.
Die Spiele
| Spiel | Art | Spieler | KI |
|---|---|---|---|
| Heimweg | Figurenrennen mit Rauswerfen | 2–4 | ja |
| Dame | Brett, mit Schlagzwang | 2 | ja |
| Mühle | Brett | 2 | ja |
| Viererreihe | Steine einwerfen | 2 | ja |
| Letzte Karte | Ablegespiel mit Aktionskarten | 2–6 | ja |
| Schwimmen | 31 sammeln, Leben verlieren | 2–6 | ja |
| Pfefferwurf | 5 Würfel, Punkteblock | 1–6 | ja |
| Mäxchen | Bluffen mit verdecktem Wurf | 2–6 | ja |
| Quizabend | Wissensfragen, alle gleichzeitig | 1–8 | ja |
| Wortjagd | Wörter erraten | 2–6 | ja |
| Stadt, Land, Pfeffer | Begriffe zum Buchstaben | 2–8 | nein |
| Kritzelraten | Zeichnen und raten | 3–8 | nein |
Voraussetzungen
| Abhängigkeit | Pflicht/optional | Wofür | Link |
|---|---|---|---|
| FiveM-Server-Build ≥ 7290 | Pflicht | in fxmanifest.lua als /server:7290 hinterlegt |
https://runtime.fivem.net/artifacts/fivem/build_server_windows/master/ |
| OneSync | Pflicht | Sitzplätze, Lobbys in der Nähe, Tisch-Props | https://docs.fivem.net/docs/scripting-reference/onesync/ |
| ESX Legacy, QBCore oder Qbox | Pflicht (eins davon) | Geld, Gruppen, Identifier – Config.Framework = 'auto' erkennt es |
https://github.com/esx-framework/esx_core |
| ox_lib | Pflicht | UI-Bausteine, Callbacks | https://github.com/overextended/ox_lib |
| oxmysql | Pflicht | Datenbank (Tische, Statistik, Einsätze) | https://github.com/overextended/oxmysql |
| ox_target | optional | Interaktion am Tisch – ohne läuft es über Taste E |
https://github.com/overextended/ox_target |
| ox_inventory, qb-inventory (auch ps-/lj-) oder ESX-Inventar | optional | nur für die Spielebox (Item gamenight_box) |
https://github.com/overextended/ox_inventory |
| esx_addonaccount, Renewed-Banking oder qb-banking | optional | Hausanteil auf ein Firmenkonto (ServerConfig.HouseAccount) |
– |
Installation
- Ressource im Cfx.re-Portal (Granted Assets) herunterladen
- Nach
resources/[pepper]/pepper_gamenightentpacken – nicht umbenennen, der Item-Exportpepper_gamenight.…hängt am Ordnernamen - Für die Spielebox das Item eintragen (optional):
| Inventar | Datei | Wohin |
|---|---|---|
| ox_inventory (ESX, QBCore, Qbox) | install/ox_items.lua |
Eintrag in ox_inventory/data/items.lua vor die letzte } – inklusive server.export |
| qb-inventory / ps- / lj-inventory | install/qb_items.lua |
Eintrag in qb-core/shared/items.lua (QBShared.Items) |
| ESX-Standardinventar | install/esx_items.sql |
in die Datenbank importieren |
Das Bild aus install/images/ in den Bilderordner deines Inventars kopieren.
4. Datenbank: Die Tabellen legt das Script beim Start selbst an. Nur wenn dein DB-Benutzer kein CREATE-Recht hat, vorher install/pepper_gamenight.sql importieren
5. In der server.cfg nach den Abhängigkeiten eintragen und das Admin-Recht vergeben:
ensure oxmysql
ensure ox_lib
ensure es_extended # bzw. qb-core oder qbx_core
# ensure ox_target # optional
# ensure ox_inventory # optional, für die Spielebox
ensure pepper_gamenight
add_ace group.admin pepper_gamenight.admin allow
- Server starten – in der Konsole steht
Pepper Game Night v1.0.0 gestartet (…, 0 Tische)
Erster Test
- Als Admin an die Stelle stellen, an der die Tischmitte sein soll,
/spieleadmin→ Neuer Tisch, speichern - Am Tisch
Edrücken (oder ox_target): die Spiele-Zentrale öffnet sich - Lobby erstellen, z. B. Viererreihe, im Warteraum eine KI hinzufügen und Runde starten
- Runde zu Ende spielen –
/spielestatszeigt danach deine Statistik
Konfiguration
| Datei | Inhalt |
|---|---|
config/config.lua |
Sprache, Befehle, Konten, Taste, Spiele, Zeiten, Lobby, KI, Einsätze, Statistik, Spielebox, Tische, Oberfläche |
config/server.lua |
Admin-ACE, Webhooks, Firmenkonto für den Hausanteil – wird nie an Clients gesendet |
data/*.json |
Quizfragen und Wörter, von dir erweiterbar. Bleiben auf dem Server |
Name, Plätze, Tischmodell, erlaubte Spiele, Jobs und Einsatz-Grenzen eines Tisches stehen nicht in der Config, sondern
werden im Spiel mit /spieleadmin eingestellt.
Grundlagen
| Option | Standard | Bedeutung |
|---|---|---|
Config.Locale |
'de' |
Sprache (de / en) – Ordner in locales/ |
Config.Framework |
'auto' |
auto, esx, qbcore, qbox, standalone |
Config.Accounts |
cash, bank |
erlaubte Konten für Einsätze |
Config.AdminGroups |
admin, superadmin, god |
Framework-Gruppen, die als Admin zählen |
Config.Keys.Open |
'' |
Vorbelegung für die Spiele-Zentrale, z. B. 'F6' |
Spiele und Zugzeit
Jedes Spiel lässt sich ausschalten; turnTime legt die Sekunden je Zug fest (10 bis 300). Fehlt ein Spiel in der Liste, ist es an.
Config.Games = {
checkers = { enabled = true, turnTime = 60 },
shed = { enabled = false },
}
IDs: race (Heimweg), checkers, mill, four, shed (Letzte Karte), swim, dice5 (Pfefferwurf), liar (Mäxchen),
hangman (Wortjagd), quiz, categories, draw. Für quiz, categories und draw gelten eigene Phasen-Zeiten.
Lobby, Runde und KI
| Option | Standard | Bedeutung |
|---|---|---|
Config.Game.StartDelay |
4 |
Countdown vor der Runde in Sekunden |
Config.Game.TimeoutsToReplace |
3 |
Zeitüberschreitungen in Folge, bis eine KI den Platz übernimmt |
Config.Game.MaxDistance |
8.0 |
Meter vom Tisch; weiter weg = Platz verlassen |
Config.Lobby.ListDistance |
150.0 |
Reichweite der Lobby-Liste in Metern (0 = alle Lobbys) |
Config.Lobby.MaxSpectators |
6 |
Zuschauer je Lobby |
Config.Bots.Enabled |
true |
KI-Mitspieler an/aus |
Config.Bots.DelayMin / DelayMax |
800 / 2500 |
Bedenkzeit der KI je Zug in Millisekunden |
Einsätze
| Option | Standard | Bedeutung |
|---|---|---|
Config.Stakes.Enabled |
true |
Einsätze an/aus |
Config.Stakes.Min / Max |
100 / 50000 |
Grenzen; je Tisch im Editor enger einstellbar |
Config.Stakes.HouseCut |
0 |
Prozent für das Haus (Konto: ServerConfig.HouseAccount) |
Config.Stakes.Split |
{ 100 } |
Topf nach Platz in Prozent, z. B. { 70, 30 }; der Rest geht an Platz 1 |
Config.Stakes.DailyLimit |
0 |
höchster Verlust je Charakter und Tag (0 = aus) |
Config.Stakes.AllowBox |
false |
Einsätze auch an der Spielebox erlauben |
Spielebox, Tische, Anzeige
| Option | Standard | Bedeutung |
|---|---|---|
Config.Box.Enabled / Item |
true / 'gamenight_box' |
Spielebox an/aus und Item-Name |
Config.Box.Seats |
4 |
Plätze am Box-Tisch |
Config.Box.IdleMinutes |
5 |
ohne Lobby wird der Tisch nach dieser Zeit eingepackt |
Config.Box.NoGoZones |
leer | Sperrzonen, z. B. { coords = { x = 440.0, y = -982.0, z = 30.0 }, radius = 60.0 } |
Config.Table.Models |
4 Modelle | Tischmodelle mit model und chair für den Editor |
Config.Table.SeatRadius / SeatZ |
1.35 / 0.5 |
Abstand Sitz ↔ Tischmitte, Sitzhöhe |
Config.Table.ChairHeadingOffset |
180.0 |
falls Stühle verkehrt herum stehen: 0.0 |
Config.Interact.Mode / Key |
'auto' / 38 |
auto (ox_target, sonst Taste), target, key; 38 = E |
Config.Text.Blocklist |
leer | gesperrte Wortteile für Freitext, klein geschrieben |
Webhooks
In config/server.lua ('' = aus): admin (Tisch angelegt, geändert, gelöscht), rounds (jede gewertete Runde),
money (nur Runden mit Einsatz). Webhooks enthalten nur Namen, nie Spieler-Identifier.
Tische anlegen
Stell dich an den Ort, an dem die Tischmitte sein soll. Deine Blickrichtung wird Platz 1. /spieleadmin → Neuer Tisch,
Name und Plätze wählen, speichern. Steht schon passendes Mobiliar dort, schalte Tisch erzeugen und Stühle erzeugen aus.
Je Tisch lassen sich Spiele beschränken und Einsätze mit Mindest- und Höchstwert einstellen.
Unter Nur für Jobs trägst du Jobnamen getrennt durch Komma ein – leer bedeutet: für alle.
So wird gespielt
- Am Tisch E drücken oder per ox_target öffnen. Die Zentrale zeigt Lobbys in der Nähe.
- Lobby erstellen: Spiel wählen, optional private Lobby mit PIN.
- Im Warteraum Plätze, Regeln und Einsatz einstellen, KI hinzufügen oder Spieler einladen.
- Runde starten. Nach dem Ergebnis geht es mit „Nochmal“ oder „Anderes Spiel“ weiter.
Ausblenden schließt die Oberfläche, die Figur bleibt sitzen. Zurück per Taste am Tisch oder /spiele.
Eine Einladung nimmt man in der Zentrale an (/spiele).
Spielen um Einsatz
Der Ersteller wählt im Warteraum Um Geld und den Betrag. Regeln:
- Mindestens 2 Menschen, keine KI. Gegen KI lässt sich kein Geld gewinnen.
- Abgebucht wird direkt vor dem Start. Kann jemand nicht zahlen, startet die Runde nicht und alle behalten ihr Geld.
- Wer während der Runde geht, verliert seinen Einsatz. Die Ersatz-KI gewinnt nichts, ihr Anteil geht an den nächsten Menschen.
- Bricht die Runde ab (Fehler, Admin, Neustart, letzter Mensch geht), gehen alle Einsätze zurück.
- Wer offline ist, bekommt sein Geld beim nächsten Laden des Charakters.
An der Spielebox sind Einsätze standardmäßig aus (Config.Stakes.AllowBox).
Eigene Fragen und Wörter
data/quiz.<sprache>.json: Einträge mit id, cat (geo, hist, sci, cult, sport, life), q und a. Die erste Antwort
ist die richtige, das Spiel mischt selbst. data/words.<sprache>.json: hangman (nur A–Z), draw, categories.
Befehle und Rechte
Befehle
| Befehl | Wer | Was |
|---|---|---|
/spiele |
alle | Spiele-Zentrale öffnen oder zurück ins Spiel |
/spielestats |
alle | Statistik und Bestenliste |
/spieleraus |
alle | Notfall: Lobby verlassen, falls die Oberfläche hängt |
/spieleadmin |
Admins | Tische, offene Lobbys und aufgestellte Spieleboxen verwalten |
/spieledebug |
alle | Diagnose in der F8-Konsole |
Die Namen der ersten vier stehen in Config.Commands – '' schaltet einen Befehl aus.
Rechte
Es gibt genau ein Recht: Admin = ACE pepper_gamenight.admin oder eine Gruppe aus Config.AdminGroups
(admin, superadmin, god). Der Server prüft es bei jedem Admin-Aufruf neu.
Tasten
| Wo | Taste | Aktion |
|---|---|---|
| Am Tisch | E |
Zentrale öffnen (ohne ox_target) – ändern mit Config.Interact.Key |
| Überall | keine Vorbelegung | Config.Keys.Open legt eine Taste fest, Spieler ändern sie in den GTA-Tastenoptionen |
| Oberfläche | ESC |
Dialog schließen, danach die offene Ansicht |
Exports und Events
Exports (Server, nur lesend)
exports.pepper_gamenight:isPlaying(src) -- sitzt der Spieler in einer Lobby oder Runde?
exports.pepper_gamenight:getTables() -- Liste der Tische (leer, solange das Script startet)
Server-Ereignis pepper_gamenight:roundFinished
Wird nach jeder beendeten Runde auf dem Server ausgelöst – z. B. für eigene XP- oder Erfolgs-Scripts. Clients können es weder sehen noch auslösen.
AddEventHandler('pepper_gamenight:roundFinished', function(data)
if not data.ranked then return end -- nur Runden mit mindestens 2 Menschen
for _, p in ipairs(data.players) do
if not p.bot and p.place == 1 then
print(p.name .. ' hat ' .. data.game .. ' gewonnen')
end
end
end)
| Feld | Inhalt |
|---|---|
roundId, game |
ID der Runde, Spiel-ID (z. B. checkers) |
tableId, tableName |
Tisch |
stake, account, pot, houseCut |
Einsatz je Spieler, Konto, Topf, Hausanteil |
ranked |
true bei mindestens 2 Menschen |
players |
Liste mit name, place, score, won, bot, source, identifier |
Framework-Anbindung
Die Bridges in bridge/ (offen) erkennen ESX, QBCore und Qbox automatisch. Der Hausanteil geht an esx_addonaccount,
Renewed-Banking oder qb-banking, wenn ServerConfig.HouseAccount gesetzt ist; sonst verlässt er den Umlauf.
Fehlerbehebung
| Problem | Lösung |
|---|---|
„Dafür fehlt dir das Recht“ bei /spieleadmin |
ACE aus der Installation setzen oder Gruppe in Config.AdminGroups eintragen |
| Tisch oder Stühle fehlen | /spieledebug in F8 prüfen; Modelle in Config.Table.Models |
| Stühle stehen verkehrt | Config.Table.ChairHeadingOffset |
| Spielebox tut nichts | Item eingetragen? Mit ox_inventory muss server.export aus install/ox_items.lua dabei sein |
| Keine Einsätze wählbar | Config.Stakes.Enabled, am Tisch „Einsätze erlauben“; an der Box AllowBox |
| Spiel fehlt in der Auswahl | Config.Games und Spiele-Auswahl am Tisch prüfen |
| Oberfläche hängt | /spieleraus |
FAQ
Sind Tische dabei?
Nein. Ein Admin stellt sie im Spiel mit /spieleadmin auf. Tisch und Stühle erzeugt das Script, oder du nutzt vorhandenes Mobiliar.
Kann man allein spielen?
Ja, mit KI-Mitspielern in 10 der 12 Spiele. Pfefferwurf und Quizabend lassen sich auch von einem Spieler starten. Stadt, Land, Pfeffer und Kritzelraten brauchen Menschen.
Kann man gegen die KI Geld farmen?
Nein. Einsätze brauchen mindestens 2 Menschen und keine KI. Geht ein Spieler während einer Runde mit Einsatz, gewinnt die Ersatz-KI nichts.
Was passiert mit Einsätzen nach einem Absturz oder Neustart?
Einsätze stehen vor dem Start in der Datenbank. Nach Abbruch, Absturz oder Neustart werden sie erstattet; wer offline ist, bekommt das Geld beim nächsten Laden des Charakters.
Können Spieler verdeckte Karten oder Quizlösungen auslesen?
Würfel, Karten, Züge und Geld entscheidet der Server. Verdeckte Karten und Quizlösungen erreichen keinen Client vorzeitig, die Quizdateien in data/ bleiben auf dem Server.
/spieleadmin sagt „Dafür fehlt dir das Recht“.
Die ACE-Zeile add_ace group.admin pepper_gamenight.admin allow in die server.cfg eintragen oder deine Gruppe in Config.AdminGroups aufnehmen.
Die Spielebox tut nichts.
Das Item gamenight_box muss in deinem Inventar eingetragen sein – bei ox_inventory mit dem server.export aus install/ox_items.lua. Außerdem muss Config.Box.Enabled = true sein; in Sperrzonen (Config.Box.NoGoZones) lässt sich keine Box aufstellen.
Kann ich vorhandene Möbel oder eine MLO nutzen?
Ja. Stell dich beim Anlegen in die Tischmitte und schalte Tisch erzeugen und Stühle erzeugen aus. Stehen Stühle verkehrt herum, hilft Config.Table.ChairHeadingOffset.
Kann ich einen Tisch auf bestimmte Jobs beschränken?
Ja. Trag die Jobnamen unter Nur für Jobs in /spieleadmin ein, getrennt durch Komma. Leer bedeutet: für alle.
Kann ich die Zugzeit ändern?
Ja, je Spiel mit turnTime in Config.Games (10 bis 300 Sekunden). Quizabend, Stadt, Land, Pfeffer und Kritzelraten nutzen eigene Phasen-Zeiten.
Kann ich eine Taste für die Zentrale festlegen?
Ja. Config.Keys.Open legt eine Vorbelegung fest, z. B. 'F6'. Mit '' setzt jeder Spieler seine Taste in den GTA-Tastenoptionen selbst.
Kann ich für Siege XP vergeben?
Ja, mit dem Server-Ereignis pepper_gamenight:roundFinished (siehe „Exports und Events“). data.ranked ist nur bei Runden mit mindestens 2 Menschen true.
Kann ich eigene Quizfragen ergänzen oder übersetzen?
Fragen und Wörter stehen in data/quiz.<sprache>.json und data/words.<sprache>.json – im Quiz ist die erste Antwort die richtige. Für eine neue Sprache kopierst du locales/en/, übersetzt es, legst die passenden Dateien in data/ an und setzt Config.Locale.
Wie spiele ich ein Update ein?
Neue Version im Cfx.re-Portal (https://portal.cfx.re/assets/granted-assets) herunterladen und den Ordner ersetzen – vorher config/, data/ und angepasste locales/ sichern. Tische und Statistik liegen in der Datenbank und bleiben erhalten.
Support
Ticket im Discord öffnen: https://discord.gg/6NaFJWKDYu (Kategorie „Script Support“) – den Kauf vorher mit /verify verknüpfen.
Permanent auf dem Dev-Server von Pepper Scripts getestet.
Changelog
Aktuelle Version: 1.0.0 (2026-11-01). Alle Änderungen stehen auf der Updates-Seite und in CHANGELOG.md in der Ressource.
Fehler gefunden? Melde ihn im Discord.