XS-Paintball
Eight game modes, killstreaks and wagers, with a map builder that runs in game. Lobbies are bucket-isolated, so a match is invisible to everyone outside it.
Requirements
ox_lib and oxmysql, plus Qbox or QBCore. Nothing else is required.
Installation
- Import
sql/xs_paintball.sql. - Drop the folder into your resources and
ensure XS-Paintballafterox_libandoxmysql. - Set your entry point in
Config.EntryPoints, or setConfig.OpenAnywhere = trueand use/paintball. - Set
Config.Staging.coordsto wherever the paintball crowd should gather. Players have to be standing there to join a match.
Two maps ship with it and load on first start. They are built from props on open tarmac, so they work anywhere and are a reasonable thing to pull apart in the builder. Turn them off with Config.LoadPresetMaps = false.
The builder
Maps are built in game: cover, spawns, objectives and boundaries, all placed by hand. A map is stored in the database, so it survives updates.
Game modes and lobbies
Eight modes, with rounds, votes and a quick-play path for when nobody wants to organise anything.
Each lobby runs in its own routing bucket. Players in a match cannot see or be shot by anyone outside it, and nobody outside sees the match happening.
Staging, dispatch and voice
The staging area is the only way in. That is deliberate — it stops a player joining mid-firefight from wherever they happened to be standing.
Paintball is kept off the dispatch board, so a match does not send police to an arena. Team voice is handled per lobby where your voice resource supports it.
Before going live
- Set
Config.Staging.coords. Without it players cannot join anything. - The preset maps are starting points on open tarmac, not finished arenas for your map.
- Check your voice resource before promising team voice.
Troubleshooting
Players cannot join a match
They are not stood in the staging area. Check Config.Staging.coords and its radius.
The menu will not open
You are not at an entry point. Either add one to Config.EntryPoints or set Config.OpenAnywhere = true.
People outside the match can see it
Routing buckets are being overridden by another resource. Anything else that sets a player's bucket will fight this.
Updating
- Back up the database first.
- Keep a copy of your edited
config.lua. - Check recent commits for SQL changes before replacing files.
- Replace the resource folder, merge your config back, restart.
Support
Bugs and questions go to the Discord. Include your server's console output — the resource prints the reason when it refuses to do something, and that line is usually the whole answer.