Dokumentation

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

  1. Ressource im Cfx.re-Portal (Granted Assets) herunterladen
  2. Nach resources/[pepper]/pepper_poker entpacken – nicht umbenennen
  3. Datenbank: Die Tabellen entstehen beim ersten Start automatisch. Ohne CREATE-Recht vorher install/pepper_poker.sql importieren
  4. config/config.lua prüfen (Sprache, Konten, Rake, Spielablauf), config/server.lua für Webhooks und Rake-Konto
  5. In der server.cfg nach oxmysql, ox_lib und 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
  1. Server starten – in der Konsole steht Pepper Poker 1.1.0 gestartet (Framework: …, Tische: 0)
  2. 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

  1. Als Admin an eine freie Stelle stellen und /pokeradmin → Neuer Tisch hier wählen (2 Plätze, Konto Bargeld)
  2. Am Tisch per ox_target oder [E] öffnen, einen Platz anklicken und ein Buy-in wählen – der Betrag wird abgebucht
  3. Ohne zweiten Spieler: Config.Bots.Enabled = true setzen und mit /pokerbot 1 einen Bot dazusetzen
  4. Eine Hand spielen, dann Aufstehen – der Stack wird sofort ausgezahlt; /pokerbot 0 entfernt 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

  1. Tisch öffnen: am Tisch per ox_target oder [E] – du bist zuerst Zuschauer
  2. Platz nehmen: freien Platz anklicken (höchstens 6 m von der Tischmitte), Buy-in wählen – der Betrag wird sofort abgebucht
  3. Spielen: Du spielst ab der nächsten Hand mit. Eine Hand startet, sobald 2 Spieler mit Chips sitzen
  4. Aktionen: Fold, Check/Call, Bet/Raise mit Schieberegler, Eingabefeld und Schnellwahl ½ Pot · Pot · All-in
  5. Zeit abgelaufen: automatisch Check, sonst Fold; nach 2 Zeitüberschreitungen in Folge setzt du aus
  6. Nachkaufen: bis zum Höchst-Buy-in, gebucht vor der nächsten Hand
  7. 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.