Documentation

Getting started

Install the system, start it in the right order, and know exactly what it does and what it leaves to you.

Everything a server owner needs to get World Vehicles running, in the order you will actually need it. Deeper material lives in three companion pages: Handling for tuning, API for scripting, and Model standard for preparing your own cars.

What you are installing

The rdr3 engine has no car class. World Vehicles builds one: each car is a composite RDR object driven by a C# controller that solves wheel contact, drive torque, gearing, steering and braking every frame. None of the SetVehicle* natives from other Cfx platforms apply to it, and their handling.meta will not configure it.

The core is the product. Every car and the radio are separate modules, each bought on its own.

Part What it is
world_vehicles The core: physics, seats, panels, lights, damage, sound, API
wv_<name> One car: its model, collision and complete profile
world_vehicle_radio Optional add-on, five stations on a shared server clock

Requirements

  • RedM with set gamename rdr3. A warning naming gta5 means the server is in the wrong mode, whatever the folder is called.
  • OneSync enabled.
  • The prepared car modules you bought.

A pinned portable Newtonsoft.Json ships inside the resource. Do not replace it with a desktop build and do not ship CitizenFX.Core.dll.

Install

Copy the core and your car modules into resources. Never mix DLLs from different versions, and never copy src, obj or the toolchain onto a server.

There is no fleet list to maintain. The core finds every started wv_<profile> resource that publishes its own vehicle.json, so starting wv_pioneer_sedan is all it takes for the pioneer_sedan profile to appear. No registration script, no event, no array in the config. The older vehicleResources key still parses for setups that already use it, but it is a compatibility path rather than an allowlist, and a correctly authored module needs nothing from it.

Leave the existing controls, access, limits, bridge, camera, audio and diagnostic sections of the config alone.

Three names look alike and are not interchangeable. wv_pioneer_sedan is the resource, pioneer_sedan is the profile ID you spawn, wv_pioneer_sedan_body is the chassis model.

Start the car modules before the core and they are ready the moment the first player connects. The order is not mandatory: a core that comes up with no cars at all picks a module up within about five seconds of its files appearing, and the menu refreshes itself. The radio starts after the core.

cfg
set gamename rdr3
set onesync on

add_ace group.wv_developer worldvehicles.developer allow
add_principal identifier.license:YOUR_LICENSE_HERE group.wv_developer

ensure wv_pioneer_sedan
ensure world_vehicles
ensure world_vehicle_radio

After editing a profile JSON by hand, restart world_vehicles. Profiles are cached at start, so restarting only the car module is not a reliable reload.

Permissions

The developer ACE, worldvehicles.developer by default, opens /wvmenu and every administrative action. Do not grant it to builtin.everyone.

To gate ordinary driving as well, set access.requireUseAce: true or the convar wv_require_ace 1, then grant worldvehicles.use to the group that may drive. A config value of true cannot be turned off again by the convar. Leaving a seat always stays available, so revoking a permission never traps a player inside a car.

The full set of permission scopes, including what a trusted server resource can do, is in the API reference.

Controls

Key or command Action
/wvspawn <profile> Spawn a new car from a profile
/wventer Take the driver seat of the nearest car
/wvmenu Admin menu after a server-side ACE check, or the player menu when Freeroam is on
F Nearest free seat by door proximity, or exit
2 / L / H Engine / lights / horn
W, S, A, D, Space Throttle and brake, steering, handbrake
R Reverse, in simplified and manual
E / Q Gear up and down, manual only

Three transmission modes ship: automatic picks direction from W and S near zero speed, simplified adds an explicit reverse on R, manual puts the ratios on E and Q. Clutch and neutral are not simulated. Gear counts come from each car's own profile; the shift policy is described in Handling.

Players who have remapped these keys in their own Cfx settings keep their choice. A server default does not overwrite a personal binding.

What each car can do

Seats are server-owned and claimed by door proximity. Doors, hood and trunk are hinged parts with their own pivots. Lamp groups are authored anchors for front, tail and brake.

Nothing is invented for a model that lacks it: a doorless single-seat racer has no doors, and a car without real bumpers has no bumper damage stages.

Damage derives body and engine health from measured velocity change on impact, plus bullet marks on the bodywork. Power falls with engine health down to a floor, then the engine cuts and will not restart until repaired. Confirmed flooding kills the engine; towing it back to dry land does not undo that.

Paint is chosen from an authored palette, up to seven presets per channel and forty-nine explicit pairs, primary and secondary separately.

Number plates carry up to eight characters in one of five state styles, listed with the text rules in the API reference. A new car comes out with a generated plate in WV 48271 form and a random state, assigned once and never rerolled by a repair or a change of owner.

Quick tuning offers engine levels from stock to plus forty percent, a custom top-speed preset, and suspension firmness and ride height. All of it is per car and server-authoritative.

Paint, plates, health and upgrades are runtime state for the life of the session. They are not a saved garage. If you want them to survive a restart, store them yourself and reapply them after a fresh spawn; the API reference shows how.

The admin menu

/wvmenu opens a compact panel on the right. It covers three separate scopes, and knowing which one you are in avoids most confusion:

Scope Changes
Instance Paint, plate, engine, lights, panels, upgrades, repair, flip, despawn for the selected car
Model Shared baseline for every car of that profile
Global Controls, transmission mode, speedometer, debug

Apply now is for this session. Save & apply also persists the submitted patch across restarts. Export writes a reviewable file and changes nothing. Those are three different operations, and an export never installs itself.

The speedometer is off by default. An owner with the developer ACE can switch it on globally; it then shows for any player in a valid seat, including people who join later.

Freeroam is the one switch that changes who may open that panel. It is off by default and lives in global settings. Turned on, any connected player gets a reduced menu for their own cars: spawn an available model, look at what they have out, paint it, plate it, delete it, up to three at a time. It is a server policy, not a role, and it never hands out the developer ACE or an administrator action. The commands above stay admin-only whatever Freeroam is set to.

What it does not do

Every item below is genuinely absent, written here rather than discovered after purchase.

  • No free body deformation. There is no dent at the point of impact. Bumpers have prepared dented and crushed stages where real detachable bumpers exist, and the physical colliders keep their undeformed shape.
  • No glass break, no torn-off panels. Windows do not shatter; doors, hood and trunk open and close but cannot be removed.
  • Paint is chosen, not mixed. Colours come from the authored palette. There is no arbitrary RGB or hex setter, and a colour a model has no assets for cannot be selected.
  • No lasting tyre tracks, no punctures. Wheels raise dust on dry ground. Temporary tread marks exist as an opt-in that ships switched off, and they fade within a minute; nothing is written into the terrain and nothing survives a restart. Gunfire does not deflate a tyre.
  • Session state, not a database. Nothing is a built-in garage. Persist what you need through the API.
  • Obfuscation is not encryption. Distributed builds carry conservative name obfuscation on the implementation assemblies. Public SDK, events, exports and string literals keep their names. It makes the code inconvenient to read; it does not make a .NET assembly impossible to decompile. Keep secrets and authority on the server.
  • Offline tests are not in-game certification. The suite catches JSON, contract, RSC8, BVH, collision mask and coordinate errors. It does not confirm pedestrian collision, light quality, seating or synchronisation.

Before you go live

Bring up one fresh car at a time and walk this list on two connected clients. Anything that fails here will fail louder with players on the server.

  • Streaming and wheel assembly.
  • Pedestrian collision before entering, from all four sides.
  • Every seat and every panel.
  • Lights at night, each group separately.
  • Bumper damage and repair, where the model has bumpers.
  • Every paint pair and both plate mounts.
  • Deletion cleanup: no orphaned wheels, panels, plates, lamps or sounds.
  • Two-client synchronisation, including someone joining late.

Offline previews do not reproduce RDR glass, emissive materials or beam shading, so the final look has to be accepted in game.