Pepper Poker
Texas Hold'em an frei platzierbaren Tischen – Tisch-Editor im Spiel, Side-Pots, Zuschauer, private Runden mit PIN, Rake, Statistik und Bestenliste für ESX, QBCore und Qbox.
Überblick
Pepper Poker bringt No-Limit Texas Hold'em auf deinen Server: Spieler setzen sich an einen echten Tisch, kaufen sich
ein und spielen gegeneinander – mit Blinds, Side-Pots, All-ins und Zuschauern. Die Tische stellt ein Admin im Spiel mit
/pokeradmin auf, ohne Koordinaten in einer Config. Der Server mischt, gibt und rechnet alles; fremde Karten verlassen
den Server erst am Showdown. Jeder Stack ist zusätzlich in der Datenbank gesichert.
Nur für Spielgeld. Verbinde Pepper Poker nicht mit echtem Geld oder mit Währungen, die man für echtes Geld kaufen kann – die Regeln von Rockstar und Cfx.re verbieten Glücksspiel um echtes Geld.
Features
- No-Limit Texas Hold'em für 2–8 Spieler pro Tisch, bis zu 40 Tische pro Server
- Tisch-Editor im Spiel (
/pokeradmin): anlegen, versetzen, ändern, ein-/ausschalten, löschen, Spieler vom Tisch nehmen - Je Tisch einstellbar: Name, Plätze, Small/Big Blind, Mindest- und Höchst-Buy-in, Konto, Rake, PIN, Tisch und Stühle erzeugen
- 4 Konten: Bargeld, Bankkonto, Schwarzgeld oder Chips als Item (
poker_chips) - Vollständige Regeln: Blinds, Mindest-Raise, All-in, Side-Pots, Split-Pots, Heads-up-Reihenfolge, automatisches Aufdecken bei All-in
- Der Server entscheidet alles: Mischen, Geben, Einsätze, Pots, Geld und Rechte
- Zug-Timer: 25 s Bedenkzeit, danach automatisch Check oder Fold; nach 2 Zeitüberschreitungen in Folge setzt der Spieler aus
- Nachkaufen, Aussetzen, Aufstehen direkt am Tisch
- Zuschauen an jedem Tisch (bis zu 12 Zuschauer), private Tische mit PIN (4–8 Ziffern)
- Rake mit Prozentsatz, Deckel und „No Flop, No Drop“ – optional an ein Firmenkonto
- Geld-Sicherheit: bei Disconnect, Charakterwechsel, Neustart oder Absturz wird ausgezahlt bzw. beim nächsten Einloggen nachgezahlt
- Statistik & Bestenliste (
/pokerstats), 6 Schnell-Reaktionen, Protokoll, Anzeige der eigenen Handstärke - Discord-Webhooks, Hand-Protokoll in der Datenbank, 2 Server-Exports
- Deutsch & Englisch, Config, Sprachdateien und Bridges offen
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, Zuschauer, 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, gesicherte Stacks, Statistik) | 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 das Konto „Chips“ (Item poker_chips) |
https://github.com/overextended/ox_inventory |
| esx_addonaccount, Renewed-Banking oder qb-banking | optional | Rake auf ein Firmenkonto (ServerConfig.RakeAccount) |
– |
Installation
- Ressource im Cfx.re-Portal (Granted Assets) herunterladen
- Nach
resources/[pepper]/pepper_pokerentpacken – nicht umbenennen - Datenbank: Die Tabellen entstehen beim ersten Start automatisch. Ohne CREATE-Recht vorher
install/pepper_poker.sqlimportieren config/config.luaprüfen (Sprache, Konten, Rake, Spielablauf),config/server.luafür Webhooks und Rake-Konto- In der
server.cfgnachoxmysql,ox_libund dem Framework 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, nur für Chips als Item
ensure pepper_poker
add_ace group.admin pepper_poker.admin allow
- Server starten – in der Konsole steht
Pepper Poker 1.1.0 gestartet (Framework: …, Tische: 0) - Im Spiel an die Stelle stellen, an der die Tischmitte sein soll (Blick dorthin, wo die Spieler sitzen sollen),
/pokeradmin→ Neuer Tisch hier
Es sind keine Tische vorinstalliert. Steht an der Stelle schon ein Tisch oder stehen dort Stühle (MLO, Casino), schalte im Editor Tisch erzeugen bzw. Stühle erzeugen aus.
Chips-Item (optional)
Nur nötig, wenn ein Tisch das Konto „Chips“ nutzt. 1 Item = Config.Chips.Value Spielgeld.
| Inventar | Datei | Wohin |
|---|---|---|
| ox_inventory (ESX, QBCore, Qbox) | install/ox_items.lua |
Eintrag in ox_inventory/data/items.lua vor die letzte } |
| 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 |
Item-Bild: install/images/poker_chips.png in den Bilder-Ordner deines Inventars kopieren (ox_inventory: web/images/, qb-inventory: html/images/).
Wenn Sitz oder Stuhl nicht passen
Alles in Config.Table (gilt für alle Tische): SeatZ (Sitzhöhe des Charakters), ChairZ und TableZ
(Höhenkorrektur der Modelle), SeatRadius (Abstand Sitz ↔ Tischmitte), ChairHeadingOffset (180.0 oder 0.0, falls
Stühle verkehrt herum stehen), Models / ChairModels (das erste vorhandene Modell wird benutzt).
Erster Test
- Als Admin an eine freie Stelle stellen und
/pokeradmin→ Neuer Tisch hier wählen (2 Plätze, Konto Bargeld) - Am Tisch per ox_target oder
[E]öffnen, einen Platz anklicken und ein Buy-in wählen – der Betrag wird abgebucht - Ohne zweiten Spieler:
Config.Bots.Enabled = truesetzen und mit/pokerbot 1einen Bot dazusetzen - Eine Hand spielen, dann Aufstehen – der Stack wird sofort ausgezahlt;
/pokerbot 0entfernt die Bots
Konfiguration
| Datei | Inhalt |
|---|---|
config/config.lua |
Sprache, Framework, Befehle, Admin-Gruppen, Konten, Chips, Spielablauf, Rake, Grenzen, Tisch-Modelle, Interaktion, Text, Blips, Reaktionen, Statistik, Oberfläche |
config/server.lua |
Admin-ACE, Webhooks, Rake-Konto, Hand-Protokoll (wird nie an Clients gesendet) |
Wichtige Werte:
| Option | Standard | Bedeutung |
|---|---|---|
Config.Locale |
'de' |
Sprache (de / en) |
Config.Framework |
'auto' |
auto, esx, qbcore, qbox, standalone |
Config.Accounts |
cash, bank, black_money, chips |
im Editor wählbare Konten |
Config.DirtyMoney |
ESX black_money, QB/Qbox cash |
worauf black_money je Framework zeigt |
Config.Chips |
poker_chips, Wert 1 |
Chips-Item und Wert pro Item |
Config.Game.TurnTime |
25 |
Sekunden Bedenkzeit pro Zug |
Config.Game.StartDelay |
6 |
Sekunden bis zur nächsten Hand |
Config.Game.TimeoutsToSitOut |
2 |
Zeitüberschreitungen in Folge → Spieler setzt aus |
Config.Game.SitOutKick |
180 |
Sekunden aussetzen, bis der Platz frei wird (0 = nie) |
Config.Game.BrokeKick |
45 |
Sekunden ohne Chips, bis der Platz frei wird |
Config.Game.MaxSpectators |
12 |
Zuschauer pro Tisch |
Config.Rake.Percent |
5 |
Rake in Prozent (0 = aus), je Tisch überschreibbar |
Config.Rake.Cap |
5000 |
höchstens so viel pro Pot (0 = ohne Deckel) |
Config.Rake.NoFlopNoDrop |
true |
kein Rake, wenn die Hand vor dem Flop endet |
Config.Limits.MaxSeats / MaxTables |
8 / 40 |
Plätze pro Tisch, Tische pro Server |
Config.Limits.MinBuyinBB / MaxBuyinBB |
10 / 500 |
Buy-in-Bereich in Big Blinds |
Config.Interact.Mode |
'auto' |
auto (ox_target, sonst Taste), target, key |
Config.UI.FourColorDeck |
false |
Vier-Farben-Blatt |
Config.Bots.Enabled |
false |
Bots zum Testen (/pokerbot, „Bot hinzufügen“ in der Tisch-Verwaltung) |
ServerConfig.RakeAccount |
nil |
Firmenkonto für den Rake – nil = Geld verlässt den Umlauf |
ServerConfig.BigPot |
50000 |
ab diesem Pot geht eine Webhook-Meldung raus |
ServerConfig.HandLogDays |
14 |
Aufbewahrung des Hand-Protokolls in Tagen (0 = nie speichern) |
Rake-Konto: ESX nutzt das Gemeinschaftskonto von esx_addonaccount (z. B. 'society_casino'), QBCore/Qbox
Renewed-Banking, sonst qb-banking. Läuft keine dieser Ressourcen, verfällt der Betrag.
Spielablauf
- Tisch öffnen: am Tisch per ox_target oder
[E]– du bist zuerst Zuschauer - Platz nehmen: freien Platz anklicken (höchstens 6 m von der Tischmitte), Buy-in wählen – der Betrag wird sofort abgebucht
- Spielen: Du spielst ab der nächsten Hand mit. Eine Hand startet, sobald 2 Spieler mit Chips sitzen
- Aktionen: Fold, Check/Call, Bet/Raise mit Schieberegler, Eingabefeld und Schnellwahl ½ Pot · Pot · All-in
- Zeit abgelaufen: automatisch Check, sonst Fold; nach 2 Zeitüberschreitungen in Folge setzt du aus
- Nachkaufen: bis zum Höchst-Buy-in, gebucht vor der nächsten Hand
- Aufstehen: Der Stack wird sofort ausgezahlt; in einer laufenden Hand werden die Karten gefoldet
Tasten in der Tischansicht: F Fold, C Check/Call, R Raise-Feld, Enter Raise bestätigen, ESC schließen.
Private Tische fragen eine PIN ab (4–8 Ziffern) – nach 5 falschen Eingaben ist die Eingabe 60 Sekunden gesperrt.
Geld-Sicherheit
| Situation | Was passiert |
|---|---|
| Disconnect, Charakterwechsel | Karten werden gefoldet, der Stack wird beim nächsten Einloggen ausgezahlt |
| Neustart der Ressource | Hände werden abgebrochen, Einsätze gehen zurück, Stacks werden ausgezahlt |
| Server-Absturz | gesicherte Stacks werden beim nächsten Start zu offenen Auszahlungen |
| Tisch geändert, versetzt oder gelöscht | Hand wird abgebrochen, Einsätze gehen zurück, alle werden ausgezahlt |
Webhooks
In config/server.lua ('' = aus):
| Schlüssel | Inhalt |
|---|---|
bigPots |
Pots ab ServerConfig.BigPot: Tisch, Pot, Gewinner mit Hand, Blinds, Rake |
admin |
Tisch angelegt, geändert oder gelöscht |
Befehle und Rechte
Befehle
| Befehl | Wer | Was |
|---|---|---|
/pokeradmin |
Admin | Tisch-Verwaltung: anlegen, versetzen, ändern, löschen, Spieler vom Tisch nehmen, Bots |
/pokerstats |
alle | eigene Statistik + Bestenliste |
/pokerleave |
alle | Notfall: Tisch verlassen, falls die Oberfläche hängt |
/pokerbot [anzahl] |
Admin, nur mit Config.Bots.Enabled = true |
Bots an den eigenen Tisch setzen, /pokerbot 0 entfernt sie |
/pokerdebug |
alle (Ausgabe in F8) | Tisch-Modell, Sitzpositionen und Props am nächsten Tisch – Hilfe bei eigenen Modellen |
Namen ändern oder abschalten ('') in Config.Commands. Tasten in der Tischansicht: F Fold, C Check/Call,
R Raise-Feld, Enter Raise bestätigen, ESC schließen.
Rechte
Es gibt genau ein Recht: Admin = ACE pepper_poker.admin oder eine Gruppe aus Config.AdminGroups (admin,
superadmin, god). Der Server prüft es bei jedem Aufruf der Tisch-Verwaltung.
Exports und Framework-Anbindung
Exports (Server)
-- server, nur lesend
exports.pepper_poker:isPlaying(src) -- true, wenn der Spieler an einem Pokertisch sitzt
exports.pepper_poker:getTables() -- Liste aller Tische
Framework-Anbindung
bridge/server/{esx,qbcore,qbox,standalone}.lua liefern Geld, Gruppen und Identifier, bridge/server/inventory.lua das
Chips-Item (ox_inventory, qb-/ps-/lj-inventory, ESX). Alle Bridges sind offen.
Fehlerbehebung
| Problem | Lösung |
|---|---|
| Kein Tisch zu sehen | Es sind keine Tische vorinstalliert – /pokeradmin → Neuer Tisch hier; Tisch auf Aktiv? |
| „Dafür hast du keine Berechtigung“ | add_ace group.admin pepper_poker.admin allow oder Gruppe aus Config.AdminGroups, danach neu einloggen |
| „Pepper Poker startet noch“ | Datenbank nicht erreichbar – oxmysql vor pepper_poker starten, Konsole prüfen |
| Kein Tisch-/Stuhl-Modell | Tisch erzeugen / Stühle erzeugen einschalten; ein vorhandenes Modell in Config.Table.Models eintragen |
| Spieler schweben, Stühle verkehrt herum | Config.Table.SeatZ, ChairHeadingOffset, SeatRadius |
| „Du hast nicht genug dabei“ | Das Geld muss auf dem Konto des Tisches liegen; bei Chips das Item eintragen |
| Oberfläche hängt | /pokerleave |
FAQ
Sind Tische dabei?
Nein, es sind keine Tische vorinstalliert. Ein Admin stellt sie im Spiel auf: an die Stelle gehen, /pokeradmin, Neuer Tisch hier – ohne Koordinaten in einer Config. Tisch- und Stuhl-Modell erzeugt das Script auf Wunsch selbst.
Welches Geld kann man einsetzen?
Jeder Tisch nutzt genau ein Konto: Bargeld, Bankkonto, Schwarzgeld oder Chips als Item. Welche Konten im Editor zur Auswahl stehen, legst du in Config.Accounts fest. Auf QBCore und Qbox zeigt Schwarzgeld in der Vorgabe auf Bargeld – das änderst du in Config.DirtyMoney.
Was passiert mit den Chips bei Disconnect oder Neustart?
Nichts geht verloren. Jeder Stack ist in der Datenbank gesichert: Bei Disconnect werden die Karten gefoldet und der Stack beim nächsten Einloggen ausgezahlt, bei einem Neustart der Ressource gehen Einsätze zurück, nach einem Absturz werden gesicherte Stacks zu offenen Auszahlungen.
Wie funktioniert der Rake und wohin geht er?
Der Rake ist ein Prozentsatz vom Pot (Standard 5 %), höchstens der Deckel (Standard 5.000), und fällt vor dem Flop nicht an („No Flop, No Drop“). Ohne ServerConfig.RakeAccount verlässt das Geld den Umlauf; mit Konto geht es an esx_addonaccount (ESX) bzw. Renewed-Banking oder qb-banking.
Können Spieler fremde Karten sehen?
Nein. Der Server mischt, gibt und rechnet alles; fremde Karten werden vor dem Showdown gar nicht an andere Spieler oder Zuschauer geschickt. Jede Aktion, jeder Betrag und jedes Recht wird am Server geprüft.
Die Konsole oder der Chat zeigt „Pepper Poker startet noch“.
Die Datenbank ist nicht erreichbar: oxmysql vor pepper_poker starten und die Konsole prüfen. Ohne CREATE-Recht importierst du vorher install/pepper_poker.sql.
Kann ich vorhandene Casino-Möbel oder MLOs nutzen?
Ja. Stell dich beim Anlegen in die Mitte des vorhandenen Tisches und schalte im Editor Tisch erzeugen und – wenn dort Stühle stehen – Stühle erzeugen aus. Mit Config.Table.SeatRadius und SeatZ passt du die Sitzpositionen an.
Die Stühle stehen falsch herum oder die Spieler schweben.
Alles in Config.Table: ChairHeadingOffset dreht die Stuhl-Modelle (180.0 oder 0.0), SeatZ ist die Sitzhöhe, ChairZ und TableZ korrigieren die Höhe der Modelle, SeatRadius den Abstand zur Tischmitte. /pokerdebug zeigt in F8, welches Modell und welche Sitzpositionen der nächste Tisch nutzt.
ox_target oder Taste?
Beides geht. Config.Interact.Mode = 'auto' nutzt ox_target, wenn es läuft, sonst die Taste E mit einem Hinweis am Bildschirm. Mit 'key' erzwingst du die Taste.
Wie viele Tische und Spieler sind möglich?
2 bis 8 Plätze pro Tisch, dazu bis zu 12 Zuschauer. In der Vorgabe sind 40 Tische pro Server erlaubt (Config.Limits.MaxTables). Ein Charakter kann nur an einem Tisch gleichzeitig sitzen.
Kann ich alleine testen?
Ja, mit Bots: Config.Bots.Enabled = true, dann „Bot hinzufügen“ in der Tisch-Verwaltung oder /pokerbot [anzahl]. Bots spielen mit Chips aus dem Nichts, erscheinen in keiner Statistik und verschwinden, sobald der letzte echte Spieler aufsteht.
Gibt es Turniere?
Nein. Gespielt wird an Cash-Tischen: Man kauft sich ein, kann nachkaufen und jederzeit aufstehen.
Kann ich die Bedenkzeit, Blinds oder Texte ändern?
Die Bedenkzeit steht in Config.Game.TurnTime und gilt für alle Tische; Blinds, Buy-in, Konto, Rake und PIN stellst du je Tisch im Editor ein. Alle Texte liegen offen in locales/de/ und locales/en/ (core.json, game.json, ui.json), die Sprache wählt Config.Locale.
Ist Poker ein Glücksspiel-Problem für meinen Server?
Pepper Poker ist nur für Spielgeld gedacht. Verbinde es nicht mit echtem Geld oder Währungen, die man für echtes Geld kaufen kann – das verbieten die Regeln von Rockstar und Cfx.re. Für die Regeln auf deinem Server bist du selbst verantwortlich.
Wie spiele ich ein Update ein?
Neue Version im Cfx.re-Portal (https://portal.cfx.re/assets/granted-assets) herunterladen und den Ordner ersetzen – config/ und angepasste locales/ vorher sichern. Tische, Statistik und offene Auszahlungen 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.1.0 (2026-10-04, Bots zum Testen, Tisch-Modell nach Sitzanzahl). Alle Änderungen stehen auf der Updates-Seite und in CHANGELOG.md in der Ressource.
Fehler gefunden? Melde ihn im Discord.