XyraLScripts
Installation guide

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.

01

Requirements

ox_lib and oxmysql, plus Qbox or QBCore. Nothing else is required.

02

Installation

  1. Import sql/xs_paintball.sql.
  2. Drop the folder into your resources and ensure XS-Paintball after ox_lib and oxmysql.
  3. Set your entry point in Config.EntryPoints, or set Config.OpenAnywhere = true and use /paintball.
  4. Set Config.Staging.coords to 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.

03

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.

04

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.

05

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.

06

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.
07

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.

08

Updating

  1. Back up the database first.
  2. Keep a copy of your edited config.lua.
  3. Check recent commits for SQL changes before replacing files.
  4. Replace the resource folder, merge your config back, restart.
09

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.

XS-Paintball on GitHub