Troubleshooting & FAQ
Common issues
| Symptom | Likely cause | Fix |
|---|---|---|
| "No court nearby" | No court has been built yet | Build one: Courts & the builder |
| Nothing saves, and the console says so | oxmysql missing or not started first | ensure oxmysql before the script |
| The builder will not open | You do not hold the permission | add_ace group.admin vsvb.admin allow, then /vb_admin. Still no? vsvb_admins in the console |
| Nobody can start a match | RequireReferee is on and no desk is placed | Place a referee desk on the court, or set it false |
| "Join a match" seems to do nothing | fillWithAI = false: strict PvP | A 3v3 court needs six real players. Turn AI fill back on |
| Only one AI opponent | The court is a 1v1 | The seat count is the court's. /vbsolo prints the format; change it by editing the court |
| The court lines sit outside the paint | That floor model has not been measured | /vb_mark once per model, then paste the row into Config.Courts.floors |
| The net prop looks rotated or floating | Model-specific alignment | /vb_netoffset, /vb_netz, /vb_polesz live, then bake the values into Config.Net |
| Using the ball does nothing | The item rows are not in ox_inventory | Paste all four from inventory/ox_inventory_items.lua, and keep consume = 0 |
| The item slots draw blank | The icons were not copied | Copy inventory/images/*.png into ox_inventory/web/images/ |
| One drink costs two cans | consume left at its default | Set consume = 0: the script removes the can itself |
| A drink does nothing when used | The item name exists in one file and not the other | The keys of Config.Drinks.items must match items.lua |
| A sound is silent | The wave name is not in the audio pack | /vb_sound plays every configured name and prints each one |
| Setting or spiking lesson refuses the court | Net at or above 2.90 m, or no setter's zone | Use a court with standard dimensions for those two lessons |
FAQ
Which frameworks does it support? All of them and none of them. It needs no framework: ESX, QBCore, Qbox or standalone all behave identically.
Do I have to import the SQL?
No. The tables are created on first boot. install.sql in the resource root is there for a backup, a restore or a migration.
Does it need a map? No. Courts are built in game, anywhere, and can also be marked out on geometry your map already has.
Is there anything to switch off before going live?
No. There is no dev switch to leave on. The tools are invisible to anyone without the vsvb.admin ace, so keep that narrow and you are done.
Can one player play alone?
Yes, two ways: a full scored match against AI (/vbsolo), and the six training lessons (/vbtrain). Neither is ranked.
Do matches against AI count on the leaderboard? They are recorded in a separate vs-AI tally but never ranked, and they do not move your streak. A PvP match backfilled with AI is ranked.
Can players put any image on their banner?
By default, yes: any https host. Restrict it with Config.Teams.imageHosts, or point players at the built-in paint editor, which can contain nothing but colours. See Teams.
Can people watch a match they are not in? Yes, anyone within 100 m of a live court sees it. That is not optional.
Does it work without ox_target? Yes. Every interaction falls back to an E prompt, and the feature is identical.
Can I translate it?
Yes. Every player-facing string is in locales/en.json, read through the ox_lib locale system.
How to report a bug
Open a ticket on Discord with your server's setup (which optional dependencies you run), the F8 client console and server console output around the error, and the exact steps to reproduce. For a court or physics issue, say which court and which format.