All documentation

Paid scripts

Poggy Chess

Chess and checkers tables placed in the world. Players sit down and play each other or a computer opponent, with wagers, a chess clock, Elo ratings and a move-by-move record of every game.

  • poggy_chessv2.2.1
  • FrameworksVORP Core, RSG Core, QBCore RedM
  • Updated5 Oct 2026

Overview#

Poggy Chess puts chess and checkers tables in your world. The script places the table, the board, both chairs and the pieces itself, so nothing has to be built into the map. Characters walk to a chair and sit down the way the game's own people do, then play on a real board of props.

Players can play each other, or sit alone and play a computer opponent that takes the other chair. Two players can put money on a game, and the script holds both stakes until the game ends. Every game is saved, so players can look back at any of them move by move.

It comes with a marble chess set, a separate resource called poggy_chess_props. See Configuration for how it is used.

  • Chess with every rule: castling, en passant, promotion, check, and draws by stalemate, repetition, the fifty-move rule and too few pieces to mate.
  • Checkers in American, Russian, Brazilian and Pool rules, or house rules picked at the table. The rules stay on screen all game.
  • A computer opponent: seven chess levels from Beginner to Grandmaster, and three checkers levels. Its moves are chosen on the server.
  • A chess clock for both games, picked by the player who sets up the game.
  • Wagers between players, held safely. Walking away loses the game, so nobody can dodge paying.
  • Elo ratings and a leaderboard, one for chess and one for checkers, per character.
  • My record: every game a character has played, with filters and a move-by-move review.
  • Unfinished games are saved and can be picked up later. Other players nearby can watch a game.
  • Five tables ready to use. Add your own in /poggy or config.lua.
  • Every setting in the /poggy settings hub, and every line of text in translations.lua.

Requirements#

  • A RedM server running VORP Core, RSG Core or QBCore RedM.
  • poggy_core 0.23.0 or newer. It connects the script to your framework.
  • oxmysql.
  • poggy_chess_props for the marble set. It comes with Poggy Chess. Without it the game's own wooden set is used.
  • For the three strongest chess levels, the server needs to reach chess-api.com over the internet. If it cannot, those levels use the server's own engine instead, so games never stop.

Installation#

  1. Download poggy_chess and poggy_chess_props from your Cfx portal.
  2. Put both folders in your server's resources folder.
  3. Add them to your server.cfg after oxmysql and poggy_core, with the props before the script:
    ensure oxmysql
    ensure poggy_core
    ensure poggy_chess_props
    ensure poggy_chess
  4. Restart the server. The database tables are created on the first start. There is nothing to import.
  5. Go to one of the five ready-made tables (they are on the map) or add your own (see Configuration).

Add or remove poggy_chess_props with a full server restart only. Never ensure, stop or restart it while players are in: that crashes the game of anyone who has a marble board in view.

The script makes three database tables:

TableWhat it holds
poggy_chess_gamesOne row per game, with the whole move list for the review.
poggy_chess_ratingsEach character's rating for chess and for checkers. It can always be rebuilt from the games.
poggy_chess_payoutsMoney the script owes players who were offline (for example a wager returned after a restart). It is paid when they are next online. Nothing in it is ever deleted.

Configuration#

Every setting can be changed in game in the settings hub: type /poggy and pick Chess & Checkers. The same settings are in config.lua. Every line players read is in translations.lua. Both files stay readable, so you can edit them.

The marble chess set

The marble set is a black and white marble board with white and black marble pieces, each one veined differently. It lives in its own resource, poggy_chess_props, which comes with Poggy Chess. It is also sold on its own. Its own page is Poggy Chess Props.

How Poggy Chess uses it:

  • It is found automatically. When poggy_chess_props is running, every table uses the marble board and pieces. There is nothing to set up.
  • One switch turns it off. In /poggy → Chess & Checkers → Tables, turn off Marble board and pieces (Config.MarbleSet, on by default) to go back to the game's wooden set.
  • Without the props, the wooden set is used. If poggy_chess_props is not running, the script uses the game's own wooden board and pieces, whatever the switch says. Nothing breaks.
  • Checkers is played on the marble board too, with the game's own red and black chips.
  • If the marble models have not loaded on a player's game within 20 seconds, that player gets the wooden set until poggy_chess restarts. A table is never held up waiting for them.

The prop settings under Advanced (Board prop, Chess piece props) are only used when the marble set is off.

Tables

Each table is one row in Tables (Config.Tables). Five ship ready to use: Blackwater Courtyard, Saint Denis Saloon, Rhodes Saloon, Armadillo Saloon and Sisika Prison.

  1. Stand where the middle of the table should be, facing the way the white chair should face.
  2. Open /poggy → Chess & Checkers → Tables, and press Add table.
  3. Give it an Id (letters, numbers and underscores). It is saved with every game played there, so do not change it once games have been played.
  4. Give it a Name. Players see it on the prompts and table screens.
  5. On Position, press use my position. On Heading, use your heading. At heading 0 the white chair is on the east side.
  6. Save, then restart the script.

Each table also has Show map blip, Blip icon, Blip colour and Blip size. Turning the blip off hides the table from the map; it still works. To remove a table, delete its row. Its past games stay in everyone's record.

SettingDefaultWhat it does
Marble board and piecesonUse the marble set from poggy_chess_props. Off: the game's wooden set.
Sit distance1.8 mHow close a player must be to a chair to see the Sit prompt.
Show distance20 mTables, boards and pieces appear within this distance, and a game there can be watched. Every player places the props on their own screen, so keep it modest.
Stand-up distance8 mA seated player found further than this from the table (teleported, dragged) is stood up. That counts as leaving the game.

Games and the clock

SettingDefaultWhat it does
Chess / Checkersboth onWhich games the tables offer. Turn one off to hide it from the start menu.
Checkers variant shown firstamericanThe variant the start menu opens on: american, russian, brazilian, pool or custom (house rules). Players can still pick any.
Draw by repetition3A checkers game is drawn when the same position comes up this many times. 0 turns it off.
Draw after quiet moves40A checkers game is drawn after this many moves each with no capture and no man moved. 0 turns it off.
Idle claim5 minIn a game between two players, if one takes longer than this over a move, the other can claim the win. Stops someone walking away from a wager. 0 turns it off.
Chess clockonLets the player who sets up a game pick a clock. Off: every game is untimed.
Clock shown firstnoneWhat the start menu opens on: none, or one of the clock times such as 10+0.
Clock times1+0, 3+2, 5+0, 10+0, 15+10, 30+0The times offered as buttons, written minutes+seconds added per move. Add, remove or reorder them.
Clock against the computer opponentonOffer the clock in games against the computer opponent too. Its time runs while it thinks.
Custom timesonPlayers may type their own minutes and seconds.
Longest custom time180 minThe most minutes each a custom clock may have.
Most seconds a move60 sThe most seconds a custom clock may add per move.
Low time warning20 sA clock turns red with this many seconds left.

The computer opponent

These are on the hub tab for the computer opponent.

SettingDefaultWhat it does
NameLocal PatronThe name the computer opponent goes by.
Ped modela_m_m_blwupperclass_01The character who sits in its chair. Any RedM ped model.
Chess against the computer opponentonLets players play chess against it.
Chess level shown firstclubThe chess level the start menu opens on.
Checkers against the computer opponentonLets players play checkers against it.
Checkers level shown firstmediumThe checkers level the start menu opens on.
Stockfish servicehttps://chess-api.com/v1Where the strongest chess levels ask for moves. Advanced setting.
Stockfish wait4000 msHow long to wait for chess-api.com before the server's own engine plays the move instead. Advanced setting.
HintsonPlayers may ask for a hint in games against the computer opponent (never between two players).
Hint cooldown15000 msShortest time between two hints.
Hint shown for8000 msHow long a hint stays lit on the board.

Each difficulty is one row in Chess levels or Checkers levels, and you can change, add or remove rows.

  • Chess: Beginner, Novice, Casual and Club player play on the server's own engine. The easier ones make deliberate slips (Mistake chance) so they can lose. Advanced, Expert and Grandmaster ask Stockfish at chess-api.com, aiming at a Target winning chance, so even these can be beaten. If chess-api.com cannot be reached in time, the server's own engine plays that move.
  • Checkers: Easy, Medium and Hard, always on the server's own engine. Looseness lets the easier levels pick among good moves instead of always the best.
  • Draws from move and Takes a draw up to decide when the computer opponent accepts a draw offer. Easier levels take draws readily; the hardest rarely do.
  • The name shown for a level comes from level_<id> in the NUI block of translations.lua. A new level without a line there shows its id.

Wagers

SettingDefaultWhat it does
WagersonPlayers may stake money on a game against another player.
Currencycashcash or gold.
Smallest wager1The smallest stake a player may propose.
Largest wager500The largest stake a player may propose.
Payout check120 sHow often the server looks for money it owes players who were away, and pays those who are online. Advanced setting.

Sitting, death and keys

SettingDefaultWhat it does
Walk to the chaironThe character walks to the chair and sits down. Off: they are placed straight in the chair.
Give up walking after6000 msIf walking takes longer than this (the way is blocked), the character is placed in the chair.
Sitting scenario, Scenario height, Scenario turnGENERIC_SEAT_BENCH_SCENARIO, 0.5 m, 180How the character sits. Change them only if characters sit too high, too low or facing the wrong way. Advanced settings.
When a player diesabandonA death always ends the game for both players and stands them up. abandon: no result, any wager returned. forfeit: the player who died loses, wager included. Games against the computer opponent are always abandoned.
Keyssee CommandsEvery key can be changed (Advanced settings). Each is a RedM control hash; a wrong value means the key never works.

With forfeit, killing a seated opponent wins their stake. Think before you choose it.

Records and ratings

SettingDefaultWhat it does
RatingsonElo ratings and the leaderboard.
Starting rating1200Where every character starts.
Moves before a game counts2A game needs this many moves (both players together) to be rated, so an instant resign changes nothing.
Games to be listed5Rated games a player needs before they appear on the leaderboard.
Provisional games / Provisional K / K / Master rating / Master K30 / 40 / 20 / 2400 / 10How far a rating moves in one game. These are FIDE's values. Advanced settings.
Hide games against the computer opponent at firstonMy record opens with those games hidden. Players can show them with one switch.
Close unfinished games after30 daysUnfinished games nobody picks up for this long are closed with no result when the script starts. 0 keeps them forever.

Rating changes apply from the next game. To work every rating out again under new settings, run /chesstable rerate.

Screen and sound

SettingDefaultWhat it does
Evaluation baronIn chess against the computer opponent, shows how it rates the position. Never shown between two players.
Notification time4000 msHow long the script's notifications stay on screen.
Highlight size0.85How much of each square a highlight fills (0.5 to 1).
Sound volume0.6Volume of the move, capture and check sounds (0 to 1).
Table lightonA warm light over the table while a game is on. Only the two players see it. Its height, colour, strength and range are Advanced settings.

Language and advanced

  • Language (Config.Language, default en) picks the block of translations.lua to use. Only English ships. To add a language, copy the en block, give it a new key, and translate it. Missing lines fall back to English. Keep every %s and %d.
  • The Advanced tab holds the table, board, chair and piece props, the layout of the board, the cameras and the move animation. Change these only if you use other props.
  • Debug output (off) prints what the script is doing to the server console. Leave it off on a live server.

Commands#

CommandWhoWhat it does
/chesstableAdmins and the server consoleLists every table and what is happening at it.
/chesstable reset <table id>Admins and the server consoleEnds a stuck game at that table with no result, returns any wager to both players, stands both players up and clears the board. Example: /chesstable reset rhodes_saloon
/chesstable rerateAdmins and the server consoleWorks every rating out again from the rated games. Use it after changing the rating settings. Nothing is lost.

Keys at the table

KeyWhat it does
GSit down at the chair in front of you. Seated, it picks the square under the mouse (the same as a click).
F or right-clickLet go of a piece, or take back the last jump of a checkers capture you are picking.
ZOffer a draw.
HAsk for a hint (against the computer opponent only).
CChange the camera view.
R (hold)Resign.
XClaim the win when your opponent has stopped playing (after the idle claim time).
EStand up.

Permissions#

Playing needs no permission: anyone can sit at a table.

/chesstable works for the server console and for admins. "Admin" is decided by poggy_core from your framework's own groups (admin, superadmin, god, owner, headadmin, developer). There is no separate ACE permission for it. For anyone else the command does nothing.

Who can open and change the settings in /poggy is set in poggy_core.

Using it in game#

Starting a game

  1. Walk up to a chair and press G to sit. One chair is the White / Red side, the other the Black side.
  2. The first player seated chooses the game: chess or checkers, the checkers variant, the clock and any wager.
  3. To play another player, they sit in the other chair and are invited. They see the rules, the clock and the wager before they accept.
  4. To play the computer opponent, sit alone and pick a level. It takes the other chair and plays the other colour, so a player in the black chair plays black and it moves first.

Playing

  • Click a piece, then where it goes, on the table or on the small board on screen. G picks the square under the mouse.
  • In checkers, a capture is picked one landing square at a time, so a capture that can go two ways is the player's choice. Pieces that must capture are ringed.
  • The screen shows a move list, the rules, both players' ratings and, when a clock is used, both clocks. Against the computer opponent there are hints and, in chess, an evaluation bar.
  • Other players within the show distance see the game on the table and can watch.

Wagers

  • When the other player accepts, the stake is taken from both at once. If either cannot pay, nothing is taken and the game does not start.
  • The winner gets both stakes. A draw, or a game that ends with no result (a death with abandon, an admin reset), returns each player their own.
  • Standing up or leaving the server during a wagered game loses it, and the stake with it.
  • If the server restarts during a wagered game, both stakes are returned. A player who is offline is paid the next time they are on.

The clock

  • A time is written minutes+seconds: 5+3 is 5 minutes each, plus 3 seconds after each of your moves.
  • The clocks start with the first move. A player whose time runs out loses. In chess it is a draw instead when the other side has too little left to checkmate.
  • The server keeps the time, so a slow connection cannot win a player extra time.

Leaving and saved games

  • Standing up from a game without a wager saves it, with the clocks stopped. Pick it up again from the start menu, sitting in the same chair.
  • Games against the computer opponent are saved the same way.

My record and the leaderboard

  • My record shows every game the character has played, with wins, draws and losses, opponents, filters for chess, checkers and games against the computer opponent, and a move-by-move replay of any game.
  • Only finished games between two players are rated. Games against the computer opponent never change a rating. All checkers variants share one checkers rating.
  • The Leaderboard tab lists players by rating once they have played enough rated games.

Troubleshooting#

The tables have the wooden set, not the marble one

Check that poggy_chess_props is in your resources and is started before poggy_chess in server.cfg, and that Marble board and pieces is on. If a player's game could not load the marble models within 20 seconds, that player gets the wooden set until poggy_chess restarts, and their F8 console shows a line saying so.

Players crashed when I restarted the props

Never start, stop or restart poggy_chess_props while players are in. Add it, remove it or update it with a full server restart.

I added a table but it is not there

Restart the script after saving a new table. Tables and pieces appear only within the Show distance (20 m), and only once a character is in the world, never on the character screen.

A game is stuck

Run /chesstable to see every table, then /chesstable reset <table id>. The game ends with no result, any wager goes back to both players, and both are stood up.

/chesstable does nothing

Your character is not an admin in your framework. Use the server console, or give yourself an admin group (see Permissions).

The strongest chess levels feel weaker than they should

They ask chess-api.com for moves. If your server cannot reach it within Stockfish wait (4000 ms), the server's own engine plays that move instead. Check that your host allows the server to make outgoing web requests.

A player was stood up in the middle of a game

They were more than Stand-up distance (8 m) from the table, for example teleported or dragged. That counts as leaving the game.

A player says they never got their wager back

If they were offline when it was returned, it waits in poggy_chess_payouts and is paid when they are next online (checked every 120 seconds). A row with paid_at filled in has been paid.

Characters sit too high, too low or facing the wrong way

Adjust Scenario height and Scenario turn under Sitting & keys (Advanced settings).

Updating#

Poggy Chess updates through poggy_core's updater. Your config.lua and translations.lua are merged, so new settings arrive with their defaults and your values stay.

  • poggy_chess_props does not update through poggy_core. A new version of it comes as a new download from your Cfx portal. Install it with a full server restart.
  • Keep each table's Id the same. Games are saved against it.
  • Coming from 1.x: the old games table is extended in place. Old games keep their results and can still be reviewed. Records are now kept per character.
Join the Discord Discord