Track Creator¶
Complete guide to raycin_creator — building tracks from scratch, importing, and managing your track library.
🔒 Admin / Owner permission required. The Track Creator (
raycin_creator) is restricted by your server's permission system. Ifopen_creatordoes nothing or shows a "permission denied" message, you need to ask the server owner / admin to grant you access.Server admins grant access via FiveM's ACE system:
Or to a whole group: The exact ACE permission name is inraycin_creator/config/server_config.lua(default:raycin_creator.access). Some servers also use a SQL-based whitelist (setgroup_creator_permissioncommand). Ask the owner which method is in use.Track tags (organisational labels) can be set directly in the RACE DETAILS → Tags submenu while editing a track, via the Dev Tools → 🏷 Tag Track admin menu, or via the
/tagchat command — see Track Tags for the full vocabulary and all three methods.
Opening the Creator¶
Use the open_creator key binding, or F10 → Quickish Race Sessions → 🏁 Open Creator.
If nothing happens when you run the command, you don't have access — see the permission notice above.
Creating a Track from Scratch¶
- Open the creator and select New Track.
- Place checkpoints by driving to each location and confirming.
- Place at least one prop (see requirement below).
- Place your starting grid slots at the start line.
- Set the thumbnail (see below).
- Set a track name, description, and category in Race Details.
- Publish when done — the button activates once all requirements are met.
Before Save/Publish Becomes Active — Checklist¶
The Save / Publish button stays greyed out until every one of these five requirements is met. The Track Stats HUD in the top-left corner shows a live status — any row in red means that requirement is still unmet and will block saving.
| # | Requirement | How to satisfy it |
|---|---|---|
| 1 | Track title set | Race Details → Title — must be changed from the default unknown |
| 2 | ≥ 1 starting grid slot | Place at least one grid slot in the Starting Grid sub-menu |
| 3 | ≥ 6 primary checkpoints | Place at least 6 checkpoints along the route |
| 4 | ≥ 1 prop/object placed | Place at least one prop from the Props sub-menu |
| 5 | A valid thumbnail set | Capture a thumbnail in Race Details → 📷 Set Thumbnail |
⚠️ The two most commonly missed requirements are props and thumbnail. A track with a name, 10 checkpoints, and a full grid will still show a greyed-out Save if either of those is missing.
Requirement 4 — Placing a prop¶
Every published track must include at least one world object (prop). On tracks where you want no scenery at all, the simplest solution is to place a single small prop (e.g. a cone or bollard) at an unobtrusive spot near the start line — even slightly off to the side is fine.
- Open Props in the creator main menu.
- Browse the prop list and select any item.
- Place it in the world (drive or walk to the location → confirm placement).
- The Props count in the Track Stats HUD updates from 0 to 1 — the red indicator clears.
Requirement 5 — Setting the thumbnail¶
The thumbnail is a screenshot of the track used as the preview image in the race browser. It must be captured and confirmed before Save activates.
- Open the creator main menu → Race Details.
- Select 📷 Set Thumbnail.
- A camera view activates — position yourself so the shot shows the track clearly (a corner, the start line, or a scenic section all work well).
- Confirm the shot. A small thumbnail preview appears in the Race Details sub-menu.
- The Track Stats HUD no longer shows a thumbnail error. Save/Publish is now unlockable (assuming the other four requirements are also met).
Tip: Take the thumbnail from a slightly elevated position looking along the track if possible — this gives the clearest preview image in the race browser.
Importing a UGC Track (from Rockstar Social Club)¶
- Open the creator.
- Select Import UGC.
- Paste the Rockstar job URL (e.g.
https://prod.cloud.rockstargames.com/ugc/gta5mission/...). - The track checkpoints are loaded and converted.
- Choose or create a Track Category when prompted.
- Optionally edit the Job URL field (auto-filled from the source).
- Publish to save the track to the server database.
Editing an Existing Track¶
- Open the creator and browse to the track (admin/creator role required for others' tracks).
- Select Edit.
- Modify checkpoints, name, description, category, made-by, or job URL.
- Save to update the database.
Duplicating a Track¶
There is no built-in Duplicate / Clone feature in raycin_creator.
The closest available option is XML prop export — but it only carries the prop/object layout. The following are not exported: checkpoints, starting grid, pit zone, category, title, description, thumbnail, or any checkpoint settings (Random, Boost, Transform, etc.).
Practical workarounds¶
| Goal | Best approach |
|---|---|
| Make a modified version, keep original | Create a brand-new track → use Import XML Props to recover the props from the original's XML export → re-place all checkpoints manually |
| Rename and repurpose — don't need the original anymore | Open the original → edit checkpoints and settings → change the title in Race Details → re-publish (updates in-place, old name is replaced) |
| Quick layout reference | Open the original in edit mode alongside a new track session — use the path preview lines as a visual reference |
Tip: If you build tracks you expect to variant-ise later, saving a Template (PLACEMENT → Templates) of the checkpoint + prop layout before publishing gives you a reusable starting point for the next version.
Auto-Save¶
The creator automatically saves your track every 2 minutes (configurable via Config.AutoSave.interval in raycin_creator) while:
- You have an active track open (a track ID is assigned), and
- You are currently in creator mode.
A brief on-screen notification confirms each auto-save. Auto-save only fires if a previous operation is not already in progress — it will never interrupt a manual save.
To disable: Set
Config.AutoSave.enabled = falseinraycin_creator/config/client_config.lua.
Track Stats HUD¶
While the creator is open a small overlay appears in the top-left corner. Use it as your live save-readiness checklist — any row shown in red means that requirement is not yet met and Save/Publish will remain greyed out.
| Line | What it shows |
|---|---|
| Checkpoints | Count — shown in red with ✗ if fewer than 6 (the minimum to save). Target: 10+ for a full race. |
| Props | Count — shown in red if 0. Must be ≥ 1 before Save activates. |
| Grid slots | Count — shown in red if 0. Must be ≥ 1 before Save activates. |
| Length | Estimated route length in metres (sum of straight-line distances between consecutive checkpoints) |
Save still greyed out even though all rows look OK? Check the thumbnail and title — those two requirements are not shown in the Track Stats HUD but are also required. See Before Save/Publish Becomes Active above.
Checkpoint Path Preview¶
While the Checkpoints sub-menu is open, cyan lines are drawn between consecutive checkpoints so you can see the full route shape without leaving the menu.
Snap Checkpoint to Ground¶
Two buttons appear in the Checkpoints sub-menu:
| Button | Effect |
|---|---|
| Snap This to Ground | Sets the Z of the current checkpoint to terrain height directly beneath it |
| Snap All to Ground | Snaps every checkpoint (and secondary checkpoints) to their terrain height in one action |
Both buttons are disabled while the creator is locked (multiplayer session lock).
Auto-fill Starting Grid¶
A Auto-fill Grid (8 slots) button appears at the bottom of the Starting Grid sub-menu (requires at least 1 checkpoint placed).
- Automatically places 8 grid slots in a staggered 2-column row behind checkpoint 1, facing toward checkpoint 2.
- Each slot is snapped to ground height.
- Slots will not exceed the server's
Config.StartingGridLimit. - Existing grid slots are left in place — use when the grid is empty for the cleanest result.
Checkpoint Types — Complete Reference¶
Every checkpoint starts as a Primary checkpoint — the mandatory route markers every driver must hit in order. The toggles and settings below modify its behaviour. Multiple modifiers can be combined (with exceptions noted).
Checkpoint Size Controls¶
Two sliders appear in the checkpoint sub-menu for every checkpoint:
| Slider | Range | What it controls |
|---|---|---|
| d_draw | 0.5 – 5.0 | Visual size of the checkpoint ring rendered in-world. Larger = visible from further away. |
| d_collect | 0.5 – 5.0 | Trigger radius — how close the player must get for the checkpoint to register as collected. |
Shape multipliers: Air checkpoints automatically multiply both values by 4.5×. Round / Random / Transform / PlaneRot / Warp / Lock Direction checkpoints multiply by 2.25×. This means a d_draw of 2.0 on an Air checkpoint renders as if it were 9.0 — plan accordingly.
Shape Modifiers¶
Round¶
Makes the checkpoint hitbox a circle instead of a rectangle. Useful for tight corners, elevated sections, or anywhere a square gate would be awkward.
Automatically forced ON by Random, Transform, PlaneRot, Warp, and Lock Direction.
Air¶
The checkpoint floats at its exact placed height rather than snapping to the ground. Use for aerial routes, jump gaps, or multi-level stunt tracks.
- Draw and collect sizes are multiplied by 4.5× (see size controls above).
Tall¶
Extends the hitbox vertically so the checkpoint can be triggered by vehicles at varying heights — useful on steep slopes, crests, or dips where the player's vehicle might be higher or lower than the checkpoint centre.
Lower Alpha¶
Renders the checkpoint ring at ~50% opacity (dimmed) instead of fully visible. Purely cosmetic — does not affect collection or route order. Use for subtle route guidance or decorative markers you don't want to dominate the visual.
Primary and Secondary Checkpoints¶
The Checkpoints sub-menu has a toggle at the top that switches between Primary Checkpoints and Secondary Checkpoints.
| List | Purpose |
|---|---|
| Primary | The mandatory route every player must follow. Minimum 6 required to publish. |
| Secondary | A parallel, optional set of checkpoints. Each secondary checkpoint shares an index position with a primary (e.g. secondary #3 pairs with primary #3). Used for advanced branching route configurations. |
Secondary checkpoints are completely optional — most tracks only use the primary list.
Fake Checkpoint¶
Toggle Fake on to mark this checkpoint as a non-respawn point.
- The checkpoint is fully visible and must be driven through — it advances the checkpoint counter normally.
- It is excluded as a respawn point. If a player wrecks after passing it, the respawn system skips back to the last non-fake checkpoint.
| Situation | Why Fake helps |
|---|---|
| Narrow tunnel or cave | Players must go through it, but a crash respawns them at the entrance — not stuck inside |
| Tight chicane | Enforces the route without trapping a crashed driver in a difficult recovery spot |
| Bridge or elevated section | Prevents respawning over water or at height |
| Jump ramp | Guides the route; crash respawns on the approach, not mid-air |
Tip: Use Fake for any section where a mid-section respawn would be physically awkward. Race integrity (the enforced route) is preserved; the player just gets a fairer respawn.
Sector Split¶
Mark this checkpoint as a sector timing split. When crossed, a brief overlay flashes the player's sector time delta (S1, S2, or S3) — faster or slower than their personal best for that sector.
- Maximum 3 sector splits per track.
- Only available on primary checkpoints.
- Purely informational — no effect on race scoring or position.
Vehicle Transform Checkpoints¶
Random¶
Transforms the player into a randomly selected vehicle on collection.
Random Class options:
| Class | Pool drawn from |
|---|---|
| Land Vehicle | Any random road vehicle |
| Air Vehicle | Any random aircraft |
| Boat Vehicle | Any random watercraft |
| Air + Land | Random aircraft or road vehicle |
| Transform Vehicles | The track's transform vehicle list (set in Race Details) |
| Custom | Your own defined pool — see sub-options below |
Custom sub-options:
| Option | Behaviour |
|---|---|
| Specify Class | Single GTA vehicle class (e.g. Sport, Muscle) |
| Multiple Classes | Tick several GTA classes |
| Vehicle List | A hand-picked list of specific models |
| All Vehicle | Any vehicle in the game |
| Host Class Pool | Uses whatever class the host has set in Race Settings at race time — shown as [HCP] in the creator. No track editing needed to change the class for a session. |
Host Class Pool tip: Makes your track work across any class night — Sports one week, Muscle the next. Use the Upgrade All Checkpoints to HCP bulk button to set every checkpoint at once.
Transform¶
Swaps the player into a specific named vehicle on collection.
- Use the Transform Vehicle selector in the checkpoint sub-menu to choose which vehicle from the track's transform list this checkpoint assigns.
- The transform vehicle list is set at the track level in Race Details → Transform Vehicles. Every Transform checkpoint on the track shares this same list.
- The selector cycles through available entries — each Transform checkpoint can point to a different vehicle in the list.
PlaneRot¶
Reorients the vehicle's up-axis as the player passes through — used to flip or rotate vehicles for stunt or trick sections. Always also applies a speed reduction (speed ÷ 3) as the vehicle reorients.
| Mode | Orientation result |
|---|---|
| 0 — Up | Normal upright (no rotation) |
| 1 — Right | Vehicle tilts 90° clockwise — up-axis points right |
| 2 — Down | Vehicle flips 180° — up-axis points downward |
| 3 — Left | Vehicle tilts 90° counter-clockwise — up-axis points left |
Forces Round hitbox. The speed reduction is mandatory and cannot be disabled for PlaneRot checkpoints.
Warp¶
Teleports the player's vehicle to the position of the next checkpoint on collection. The vehicle's heading and speed are preserved — only the location changes.
- Forces Round hitbox.
- Use case: link two physically distant sections of a track (e.g. rooftop to underground) without requiring the player to drive the connecting gap.
- The player skips visually to the next checkpoint — no loading screen, instant position change.
Plan your route carefully — a warp to a checkpoint the player has already passed can loop them. Always test warp sequences with Checkpoint Test Mode before publishing.
Speed Effect Checkpoints¶
Boost¶
Turns this checkpoint into a speed pad — a forward impulse is applied when driven through.
- Ring renders green.
- Works in any race mode.
- Impulse is fixed — does not stack with vehicle speed (a fast car gets the same bump as a slow one).
- Mutually exclusive with Slow — enabling one turns off the other.
- Cannot be combined with Random or Transform.
Slow¶
Turns this checkpoint into a slow zone — caps the vehicle's maximum speed to ~54 km/h for 3 seconds after collection, then fully restores.
- Ring renders red.
- The cap is time-based, not distance-based.
- Mutually exclusive with Boost — enabling one turns off the other.
Direction Lock + Pitch¶
Lock Direction¶
Locks the checkpoint's facing direction and unlocks the Pitch slider.
- Without Lock Direction, the Pitch slider is greyed out.
- With Lock Direction ON, the Pitch slider sets a vertical tilt angle applied to the vehicle as it passes through — useful for launching vehicles off ramps at a precise angle or forcing a specific vehicle orientation.
- Also forces Round hitbox.
Maintenance Checkpoints¶
Pitstop¶
Marks this checkpoint as the mandatory pit stop zone.
- On contact: engine repaired to 1000hp, tyres fixed, fuel refilled to 100%.
- Only one pit zone per track.
- Players are required to stop here when the host has enabled Mandatory Pit Stops in Race Settings.
Reset Vehicle Pool¶
Clears the no-repeat vehicle pool when driven through. The next Random checkpoint after it draws from a completely fresh pool.
- Only has any effect when the host has No Repeat enabled in Race Settings.
- Useful on long tracks where the pool is exhausted before the end — place a reset mid-race so vehicles recycle from a fresh draw.
Checkpoint Test Mode¶
Test an individual checkpoint in-world without launching a full race.
- Open PLACEMENT → Checkpoints and pick up a checkpoint (have it selected/active).
- Click Test — you are spawned at that checkpoint's location; editor UI hides.
- Drive through the checkpoint to verify it triggers correctly (check sounds, vehicle transforms, boosts, etc.).
- Click to end test and return to the editor.
Useful for verifying Warp destinations, PlaneRot orientations, or Boost/Slow effects before publishing. Server test mode is active while testing — no race is recorded.
Mutual Exclusions — Quick Reference¶
| Setting | Cannot combine with |
|---|---|
| Boost | Slow, Random, Transform |
| Slow | Boost |
| PlaneRot | (always applies speed reduction — cannot opt out) |
Bulk Operations (Main Menu)¶
Two bulk checkpoint buttons appear in the creator Main Menu:
Upgrade Random Checkpoints to Host Class Pool¶
Sets every checkpoint already marked Random / Custom (but not yet Host Class Pool) to Host Class Pool mode.
Set All Checkpoints → Random + Host Class Pool¶
Sets every checkpoint on the track to Random / Custom / Host Class Pool. Use this on imported tracks where all checkpoints should use the host's class pool.
⚠ Two-step confirm — because this overwrites every checkpoint's settings (potentially 50+), the button asks for a second click within ~3 seconds to confirm. First click shows "⚠ CONFIRM: set all N checkpoints to Random?" in amber; second click commits. Same safety pattern as Delete All Props.
Templates¶
Save a snapshot of your current checkpoint + prop layout and replay it in a future session. Useful for reusable race starts, stunt sections, or barrier arrangements you want to copy across multiple tracks.
Saving a template¶
- Open PLACEMENT → Templates.
- Click Save Template — the current checkpoints, props, and firework configuration are saved as a named template entry.
- Up to
Config.TemplateLimittemplates can be saved (default 30).
Loading a template¶
- Open PLACEMENT → Templates.
- Select a saved template from the list.
- Choose the placement mode:
- World — props/checkpoints land at their original world coordinates.
- Relative — offset from your current position.
- Click Place Template — the elements are added to the current track.
Templates store: checkpoints (primary + secondary), props, and firework settings. They do not store grid slots, category, title, thumbnail, or pit zone.
Move All¶
Shifts or rotates every element of the entire track simultaneously — all starting grid slots, all primary checkpoints, all secondary checkpoints, and all props move as a single group.
Controls¶
| Control | What it does |
|---|---|
| X | Move all elements East (+) or West (−) |
| Y | Move all elements North (+) or South (−) |
| Z | Move all elements Up (+) or Down (−) |
| Yaw | Rotate the entire track clockwise (right) or counter-clockwise (left) around its geometric centre |
| Change Rotation Speed | Step size for the Yaw control: 1°, 5°, 15°, 45°, or 90° |
| Undo Rotation | Reverses every Yaw press made since the track was last loaded — shown as "Undo Rotation (N° total)". Greyed out when no rotation has been applied this session. |
| Change Speed | Step size for X/Y/Z movement |
How to use¶
- Open PLACEMENT → Move All.
- Use the X, Y, Z sliders to shift the track. Adjust the step size with Change Speed.
- Use the Yaw slider to rotate. Adjust the step size with Change Rotation Speed.
- All elements update in real time as you scroll.
- If you rotate and the result looks wrong, press Undo Rotation before saving.
⚠ Save carefully after Yaw. Auto-save runs in the background every ~2 minutes. If you apply a rotation and walk away, auto-save may capture the rotated state before you can undo. Always verify the track looks correct before leaving the editor — or undo immediately if the rotation is wrong.
If moving would push any object outside the valid Z bounds (−199 m to 2698 m), the move is blocked and a "Z overflow" warning appears.
Use cases: - Relocate a track you built at the wrong position without rebuilding from scratch. - Rotate a track to align it with a road or to fit a different area.
Fixture Remover¶
Hides static world objects (buildings, lampposts, road furniture, map IPL objects) during the race by recording them in the track file's removal list.
How to use¶
- Open PLACEMENT → Fixture Remover.
- The list shows world fixtures near your track. Use Cycle Items to scroll through them.
- Highlight the fixture you want to remove → click Select to add it to the removal list.
- To undo: highlight it again → click Deselect to remove it from the list.
- Publish the track — the removal list is saved.
Fixtures are only hidden during an active race — they are still visible in the creator editor.
Use case: Remove a lamppost in the middle of a chicane, hide a guard rail that clips the racing line, or clear clutter from a tight stunt section.
Firework Effects¶
Add celebration particle effects that play at the finish line for race completions.
Controls¶
- Open PLACEMENT → Firework.
- Choose a particle type:
| Particle | Effect |
|---|---|
| Trail Burst | Long-arc trail ending in burst |
| Star Burst | Expanding star pattern |
| Shot Burst | Fast directional burst |
| Fountain | Rising fountain spray |
- Set the R / G / B colour sliders (0–255 each) — a live preview plays while the menu is open.
- Publish — firework effects are stored in the track file.
Effects spawn at finish-line prop objects when racers complete the race.
Block VP Classes (per-track class restrictions)¶
Prevents hosts from selecting certain vehicle classes in Race Settings for a specific track. Blocked classes appear greyed-out and unclickable when hosting that track.
Note: This feature is called "Block VP Classes" in the creator menu — VP stands for the Race Settings panel hosts use when setting up a race.
How to use it¶
- Open the creator and load or create a track.
- Open Race Details from the main creator menu.
- Select Block VP Classes.
- Tick any class you want to prevent the host from selecting.
- The button label shows how many classes are currently blocked.
- Save / Publish the track.
Category defaults¶
When you first open Block VP Classes, the list is auto-filled with sensible defaults based on the track's category:
| Category | Blocked by default |
|---|---|
| Street, Circuit, Stunt, Face To Face, Drag | Cycle, Boat, Helicopter, Plane |
| Rally, Off-Road, Trial | Boat, Helicopter, Plane |
| Air Race, Parachute | All land and water classes |
| Boat Race | All land and air classes |
| (any other category) | Nothing — all classes available |
A Reset to Category Defaults button lets you re-apply the defaults at any time.
Auto-apply: If you never open Block VP Classes before saving, category defaults are applied automatically at save time.
GTA Vehicle Class IDs (for admin config)¶
| ID | Class | ID | Class | ID | Class |
|---|---|---|---|---|---|
| 0 | Compact | 8 | Motorcycle | 16 | Plane |
| 1 | Sedan | 9 | Off-road | 17 | Service |
| 2 | SUV | 10 | Industrial | 18 | Emergency |
| 3 | Coupe | 11 | Utility | 19 | Military |
| 4 | Muscle | 12 | Van | 20 | Commercial |
| 5 | Sport Classic | 13 | Cycle | 22 | Open Wheel |
| 6 | Sport | 14 | Boat | ||
| 7 | Super | 15 | Helicopter |
Default Available VP Classes (per-track pre-fill)¶
The companion feature to Block VP Classes, working in the opposite direction:
- Block VP Classes = which classes the host cannot pick in Race Settings.
- Default Available VP Classes = which classes are pre-selected in Race Settings when this track is loaded.
When a host opens the Race Settings panel for a track with this set, the class buttons are already lit up with the preset choice — no clicking through every box. The host can still tick/untick individual classes per race to override.
Why this exists: if you race the same set of classes on every track (e.g. always Compact / Sedan / SUV / Coupe / Muscle / Classics / Sports / Super / Bikes / Off-road / Vans / Open Wheel), setting them on every track manually is repetitive. Save the standard list once, apply it everywhere in seconds.
Setting up presets (one-time admin step)¶
Open raycin_creator/config/client_config.lua and edit Config.VPClassPresets. It comes pre-populated with sensible starter presets — add or change them to suit your community.
Config.VPClassPresets = {
["Standard"] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 22 },
-- Compact/Sedan/SUV/Coupe/Muscle/SportClassic/Sport/Super/Motorcycle/Off-road/Van/OpenWheel
["Track Cars"] = { 5, 6, 7 }, -- Classics / Sports / Super
["Bikes Only"] = { 8 },
["Trucks"] = { 10, 11, 12, 17 },
["Stunt Wide"] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 22 },
["Air"] = { 15, 16 }, -- Heli / Plane
["Water"] = { 14 }, -- Boat
}
Each entry is ["preset name"] = { class IDs... }. See the table above for the canonical ID list. Add as many presets as you like.
After editing the config, run restart raycin_creator in the server console.
Applying a preset to a single track¶
- Open the creator and load the track you want to edit.
- Open Race Details from the main creator menu.
- Select Default Available VP Classes. The submenu opens.
- Select 🔧 Apply Preset to this Track. A list of all presets from
Config.VPClassPresetsappears. - Pick a preset (e.g. Standard). The classes are copied into this track's setting; you'll see a confirmation
✓ Applied preset 'Standard' (12 classes). - (Optional) tick / untick individual class checkboxes underneath if this track needs a slight variation from the preset.
- Save / Publish the track to persist.
The button label always shows the current count: "N class(es) pre-selected for VP at race time".
Applying a preset to ALL tracks in a category (bulk-apply)¶
This is the big time-saver — useful when you import 50 stunt tracks and want them all set to the same standard list in one operation.
- Open the creator and load any track that belongs to the target category. (The category name comes from the track's existing category field.)
- Open Race Details → Default Available VP Classes.
- Select 📦 Apply Preset to ALL Tracks in [category]. A list of presets appears.
- Pick a preset. A confirmation toast appears: "⏳ Applying 'Standard' to all tracks in [Stunt]...".
- The server walks every track JSON in that category, stamps the preset into each one, and reports back with: "✓ Bulk-applied to 47 tracks (skipped: 2, failed: 0)".
What gets skipped:
- Standard-import tracks under
raycin_races/local_files/are read-only — the bulk operation cannot write to them and they show in the "skipped" count. (These are the tracks shipped with the resource — back them up via git if you want to modify them by hand.) - Tracks in
raycin_creator/custom_files/<your-hash>/are always written. These are the user-created tracks the bulk operation actually modifies.
⚠️ Always overwrites. Bulk-apply does NOT skip tracks that already have a per-track value — it replaces them with the chosen preset. Commit your tracks to git or back up
raycin_creator/custom_files/before running a bulk operation if you want safe rollback.
Clearing a track's pre-fill¶
In the Default Available VP Classes submenu, select 🚫 Clear This Track. The list is emptied for the current track. When the track is later raced, the Vehicle Panel opens with no class pre-fill (host picks manually, current default behaviour).
Worked example¶
Goal: all 47 of your Stunt Race tracks should default to a balanced motorsport class set (no boats, no aircraft, no industrials, no military), without editing each track individually.
- Open
client_config.lua, confirmConfig.VPClassPresets["Standard"]is the class list you want (it's pre-set to{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 22 }— Compact through Open Wheel, no air/water/heavy). Save andrestart raycin_creator. - Open the creator. Load any track in the Stunt category.
- Open Race Details → Default Available VP Classes → 📦 Apply Preset to ALL Tracks in [Stunt].
- Select Standard. Wait a moment.
- Notification: "✓ Bulk-applied to 47 tracks (skipped: 2, failed: 0)". The two skipped are read-only local_files imports — you can edit those manually if needed.
- Now host a race on any of those 47 tracks. Open the Race Settings → Vehicles tab — every available class button is pre-lit. No clicking required. Hit Apply and start the race.
Interaction with Block VP Classes¶
The two settings can coexist on the same track:
- Block VP Classes wins: a class that's in both lists will be blocked (not selectable). The pre-fill silently skips blocked classes when populating the panel.
- Example: if a stunt track has
availableVPClasses = { 0, 1, 14, 15 }(Compact / Sedan / Boat / Heli) butblockedVPClasses = { 14, 15 }(water + air blocked for stunt), the host's Vehicle Panel pre-fills only Compact + Sedan. Boat and Heli stay greyed out per the block list.
Where it's stored¶
In each track's JSON file under mission.race.avc — an array of class IDs. Lives in the same mission.race block as blkc (Block VP) and icv (initial class). Old tracks without the field continue to work normally — they just open in the race lobby with no pre-fill (current default behaviour).
Sector Splits (creator)¶
Mark up to 3 checkpoints as sector splits for mid-race timing feedback.
How to mark a split¶
- Open the creator and load or create a track.
- Open the Checkpoints sub-menu.
- Pick up the checkpoint you want to use as a split.
- Find Sector Split in the sub-menu and enable it.
- Save / Publish — the split flags are stored in the track file.
The checkbox is greyed out if you are not on a primary checkpoint, or if you already have 3 splits set.
Props — Core Tools¶
Duplicate a Prop¶
While a prop is picked up (selected via the Cycle Items list), a Duplicate Prop button appears below the Delete button.
- Creates an exact copy of the selected prop with a new unique ID.
- The copy is immediately set as the active prop — use X/Y/Z sliders to position it.
- Useful for placing repeated elements (barriers, cones, ramps) without cycling lists each time.
Multi-Select & Group Move¶
Enable Multi-Select Mode via the checkbox in the Props sub-menu:
| Button / Control | What it does |
|---|---|
| Multi-Select Mode checkbox | Toggles the mode. Turning it off clears the current selection. |
| Add to Selection | Adds the currently picked-up prop to the selection group. |
| Select All Props | Adds every prop on the map to the selection group. |
| Deselect All | Clears the entire selection without moving anything. |
| X / Y / Z sliders | Moving the active prop moves all selected props by the same delta simultaneously. |
Selected props are highlighted with a blue outline.
Rotate Group (Multi-Select)¶
When Multi-Select Mode is active and at least one prop is selected, a Rotate Group list appears.
- Scrolling left / right rotates every selected prop around their shared centre point on the Z-axis.
- The step size matches the current prop offset speed setting.
- Works on as few as 2 props — useful for rotating barrier lines or symmetrical arches.
Undo Last Action¶
A yellow Undo Last Action button sits at the very top of the Props sub-menu.
- Shows what the last recorded action was (
add,delete, ormove). - Greyed out when there is nothing to undo.
- Up to 20 actions remembered per session.
| Action reversed | What happens |
|---|---|
| add | The prop is deleted from the map |
| delete | The prop is restored at its original position |
| move/rotate | The prop snaps back to where it was before you picked it up |
Note: Undo tracks individual prop actions only — it does not cover checkpoint changes, multi-select group moves, or paste operations.
Search Models (Prop Search)¶
A Search Models... button appears above the Category and Model lists in the Props sub-menu.
- Press Search Models... — a text input box opens.
- Type any part of a model name (e.g.
bench,ramp,barrier). Case-insensitive, searches across all categories. - Scroll the results list to preview each matching model.
- Press Place as normal to place the selected model.
- Press Clear Search to return to category browse.
While a search is active the button turns blue and shows the current query and result count.
Copy Prop Clipboard (Cross-Map Paste)¶
Copy props from one map and paste them into another in a separate editing session.
Copying props¶
- Enable Multi-Select Mode and select the props you want to copy.
- Press Copy Selected to Clipboard — saved to
raycin_creator/data/prop_clipboard.json. - A notification confirms how many props were saved.
Pasting props¶
- Open a different map in the creator.
- Press Paste from Clipboard — the saved props are loaded at their original world coordinates.
- A notification confirms how many props were added.
Note: The clipboard stores the last copied selection only. Each new Copy overwrites the previous one.
Props In Track — Browser, Search & Bulk Delete¶
A Spooner-style list of every prop already placed on the current track, for finding, jumping to, and removing props without cycling through them one by one.
Open it: PLACEMENT → Props → 📋 Browse / Search Props (N) (N = the prop count; greyed out when the track has no props).
Each row shows the prop's model name (e.g. ind_prop_firework_03 · #198). Props
imported from XML are stored as model numbers, so where there's no readable
name a row shows model <number> · #index instead.
Search¶
- 🔍 Search props (name or hash) — type part of a model name (e.g.
barrier,firework) or a model hash number to filter the list. - Plurals are tolerated — searching
fireworksstill findsind_prop_firework_03. - ✖ Clear search returns the full list.
Selecting / jumping¶
With 🗑 Delete mode OFF (default), selecting a row jumps to that prop — it's picked up and ready to move / rotate / delete with the normal Props controls.
Deleting¶
Three ways, pick whichever suits:
| Method | How |
|---|---|
| Delete one | Turn 🗑 Delete mode ON, then each row you select is deleted instantly |
| Delete all matching a search | Search (e.g. firework) → 🗑 Delete ALL N matching → click twice to confirm. Only shown while a search is active, so it can't wipe the whole track by accident |
| Delete all of one model | Select a prop → in the Props editor use Delete all of this model (N) |
Fireworks set under PLACEMENT → Firework are particle effects, not props — they are not in this list. (Firework props like
ind_prop_firework_03are.)
Copy, Paste & Repeat Props¶
In the Props editor, below Duplicate Prop, are tools for replicating a selected prop precisely.
Copy / Paste¶
- Copy Prop — remembers the selected prop's full data (model, rotation, colour, scale, all settings).
- Paste Prop (model) — drops a fresh copy (nudged slightly so it's not hidden behind the original) and picks it up so you can reposition it.
Unlike Duplicate, the copy lives in a buffer — copy once, paste many times, even after selecting a different prop or switching tracks in the same session.
Repeat / Array (tile pieces edge-to-edge)¶
Builds a run of copies that butt together exactly — ideal for laying prop-track pieces. Select your placed piece, then set:
| Control | Meaning |
|---|---|
| Repeat Direction | Front / Back / Left / Right — which side to lay copies on, relative to the prop's facing |
| Repeat Count | How many copies to add (1–50) |
| Repeat Gap (m) | Extra spacing — 0 = seamless, negative = overlap, positive = spaced |
| Repeat Rotate / copy (°) | Turn each copy by this many degrees — 0 = straight run, non-zero = a curve or loop |
Then press Repeat Prop (dir × N). It walks forward one prop-footprint per copy (measured from the model itself) and applies the rotation, so:
- Rotate 0 → a straight chain.
- Rotate small → a smooth curve.
- Rotate × Count = 360 → a full loop (e.g.
10° × 36, or15° × 24).
Re-running Repeat Prop continues the chain from the last piece placed.
If "Front" lays them the wrong way, pick Back (or Left/Right) — the four directions cover every side. On tight curves, use Gap to nudge the joins, and any single piece is still adjustable via the Browse / Search Props list.
Prop Snapping (Automatic Stack)¶
In the Props placement menu, Automatic Stack Prop (also labelled prop snapping) makes the prop you're placing click onto an existing prop at its built-in connector points, instead of floating free at raw coordinates. It uses GTA's bone-attachment system — the same snapping the official GTA Online stunt-race creator uses.
| Control | What it does |
|---|---|
| Automatic Stack Prop | Toggle snapping on. The new prop attaches to the prop you're placing against (the "parent") |
| Parent Prop Bone Index | Which attach point on the existing prop to connect to (cycle < >) |
| Child Prop Bone Index | Which attach point on the new prop to use as its end of the join |
Cycle the two bone indices until the pieces line up at their intended joints.
What it's for: GTA stunt-track pieces — the stt_prop_stunt_* blocks and
xs_prop_arena_* parts — which ship with attach bones at their ends so they snap
together seamlessly. Plain scenery props (barriers, hay bales, etc.) usually have
only bone 0, so snapping does little for them.
The bone-index rows stay locked until snapping is on and you're actively placing a prop against an existing one (so there's a parent to attach to).
Snapping vs Repeat: use Automatic Stack for official stunt blocks that have connector bones (perfect click-together); use Repeat / Array for any other prop, or to lay many copies / curves at once.
Favourite Props¶
Mark models you place often as Favourites for quick access — like Menyoo's favourite-objects list. Favourites are saved to your creator profile, so they persist across sessions and restarts.
- PLACEMENT → Props → ☆ Favourite / ★ Unfavourite — toggles the currently selected catalogue model (the one shown in the Model list) in your favourites. A filled ★ means it's saved.
- PLACEMENT → Props → ⭐ Favourite Models (N) — opens your favourites list. Selecting one sets it as the model to place and drops you back in the Props menu with the placement ghost ready.
Favourites store the model, not a placed prop — pick a favourite, then place it as normal (or use Repeat to lay a row of them).
Copying Props as Spooner XML¶
Three buttons let you copy props directly to the system clipboard as Spooner XML — no file copy, no save required.
| Button | Where | What it copies |
|---|---|---|
| Copy All Props as XML | Main creator menu | Every prop on the current track |
| Copy All Props as XML | Placement sub-menu | Same — available without leaving the Placement area |
| Copy Selection as XML | Props sub-menu (multi-select section) | Only the currently selected props |
After clicking, the XML is in your system clipboard. You can: - PLACEMENT → Paste XML from Clipboard in another track session → props load instantly at their original world coordinates (no file copy to server needed — quickest cross-session prop transfer) - Open any text editor and paste to inspect or hand-edit the XML - Load into Spooner: Object Spooner → File → Load XML
These buttons work even on unsaved tracks (no race ID required). The XML uses numeric model hashes as
<HashName>— this is fully compatible with the creator's own importer and with Spooner.
Hazard Props¶
Certain prop models placed in the creator are automatically classified as Race Hazards. When a player drives within triggering distance of one of these props during a race, a game effect fires. Hazard props work in any race mode — no VP setting required.
Spike Strip¶
| Model name | Effect |
|---|---|
p_ld_stinger_s |
Bursts front tyres (tyre index 0 and 1) on contact |
prop_ld_stinger_s |
Same — alternate model name for the same prop |
How it works: - Detection radius: 2 metres from the prop object. - When a vehicle enters the radius, both front tyres burst immediately. - A cooldown of 8 seconds per strip prevents rapid re-triggering if the vehicle stays near the prop. - Vehicles with puncture-immune tyres (certain special/invincible vehicles) are unaffected. - Each player's client runs its own detection — no server sync required.
Placement tips: - Position spike strips across the full width of a narrow chokepoint for maximum effect. - Leave an alternative wide line for skilled drivers to dodge around them. - Avoid placing strips directly on the racing line for an entire sector — save them for a single surprise point. - Combine with a nearby repair strip (if added by the server admin) to let players recover.
Delete All Props¶
A Delete All Props button appears at the bottom of the Props sub-menu. It uses a two-step confirm to prevent accidents.
- Click Delete All Props — button turns red and changes label to ⚠ CONFIRM: delete all N props?
- Click again to confirm. All props are removed instantly.
- Navigating away before the second click cancels without deleting anything.
In a multiplayer creator session, all other participants see the deletion immediately via the objects-clear sync event — no per-prop network flood.
Reorder Checkpoints¶
Three buttons appear in the Checkpoints sub-menu when a checkpoint is picked up:
| Button | Effect |
|---|---|
| Move Earlier (↑) | Swaps this checkpoint one position earlier (e.g. #5 → #4). Disabled if already #1. |
| Move Later (↓) | Swaps this checkpoint one position later (e.g. #5 → #6). Disabled if already last. |
| Move to Position... | Opens a number input to jump the checkpoint to any position directly. |
After reordering, the route path preview lines and checkpoint blips update immediately.
Track Details — Uploaded By & Job URL¶
Uploaded By¶
The Uploaded By field stores the creator's name. It is shown in-game as [Track Title] - uploaded by [name] in the pause menu during a race.
- In Track Settings, select Uploaded By [...] and type a name (max 60 characters).
- If left blank the field is cleared.
Job URL¶
Any track can store an optional Job URL. For UGC imports this is auto-filled. You can also enter or edit it manually. If set, the stats site shows a 🔗 View on Rockstar Social Club ↗ link in the track detail panel.
Track Star Rating¶
After finishing a race, a 1–5 star prompt appears. You can rate the track to help other players find the best ones.
- Ratings appear in the race browser next to the track name.
- Your rating is saved permanently. Racing the same track again replaces your previous rating.
- Ratings survive server restarts.
Importing XML Props — Spooner/Menyoo Workflow¶
Use Import XML Props in the creator to load a Spooner (Menyoo) .xml prop layout directly onto your track. Coords are world-space, so props land exactly where you placed them in Spooner.
Step 1 — Prepare your layout in Spooner¶
- Place all props in-world. They appear in the Placements list in the Object Spooner menu.
- Invisible props (ghost walls, hidden collision guides): select the prop → Edit Placement → Edit Attributes → IsVisible → False. Do this before exporting — the importer reads the flag directly from the XML.
- No-collision props (decorative objects that shouldn't block vehicles): Edit Attributes → Collision → False.
- Remove any vehicle or ped placements you don't need. The importer skips invalid model hashes automatically, but a clean file is easier to manage.
Step 2 — Export from Spooner¶
Go to Object Spooner → File → Export to XML (some versions say "Save Placements as XML").
The file is saved to menyooStuff/Spooner/ on the machine running the FiveM client — e.g. menyooStuff/Spooner/MyTrackBarriers.xml.
Step 3 — Copy the file to the server¶
| Server type | Where to put the file |
|---|---|
| Local (same PC) | Copy from menyooStuff/Spooner/ to raycin_creator/xml_imports/ |
| Remote | Upload via FTP/SFTP to raycin_creator/xml_imports/ on the server |
The filename must end in .xml. No spaces or special characters are recommended.
Step 4 — Import in the creator¶
- Open the creator → main menu → Import XML Props.
- Type the filename (e.g.
MyTrackBarriers.xml) and press Enter. - The creator reports:
[XML] Imported N props (X skipped). - Props appear in-world at their original coordinates. Use the Props sub-menu to tweak positions.
- Publish when done.
What the importer reads¶
| XML tag | Used for |
|---|---|
<HashName> |
Model name |
<PositionRotation> X/Y/Z/Pitch/Roll/Yaw |
World position and rotation |
<TextureVariation> |
Texture / livery variant |
<Collision> |
Whether the prop blocks vehicles |
<IsVisible> |
Visible or invisible in-race |
<OpacityLevel> |
Partial transparency (0 = fully invisible) |
All other Spooner tags (<Dynamic>, <FrozenPos>, <LodDistance>, etc.) are ignored — they have no equivalent in the creator.
Skipped props¶
Props are silently skipped if: - The model hash is not in the game's CDimage (add-on packs not loaded on the server will cause this). - The prop's X/Y coordinate is outside map bounds (±16,000 m) or Z is below −199 m or above 2,698 m.
The skipped count is shown in the confirmation message so you always know if something was dropped.
Tips¶
- Invisible barrier workflow: Set IsVisible = False in Spooner before exporting, not after import. Trying to hide props one-by-one in the creator after import is slow.
- Duplicate/overlapping props: Spooner sometimes creates exact duplicates when you copy-paste. Check the Placements list count before exporting — importing 200 props when you expect 100 is a sign of hidden duplicates.
- Large imports (100+ props): Work in batches by category (barriers first, then decorations) so it's easy to undo a bad batch if needed.
- Coordinate check: If props land in the wrong place, confirm Spooner was set to world space (not relative/local) at export time.
GTA:O Track Import¶
Import race tracks extracted from GTA Online (via a Tampermonkey Social Club scraper).
Setup (one time)¶
Add the ACE permission to server.cfg:
Importing tracks¶
- Use a Tampermonkey script on the Rockstar Social Club races page to download tracks as
.jsonfiles. - Drop the
.jsonfile(s) intoraycin_races/gto_import/. - In the server console, run:
| Command | Effect |
|---|---|
importgto |
Incremental — imports new files, skips tracks already imported |
importgto update |
Force — re-imports everything, overwrites existing data |
Tracks go live immediately — no resource restart needed. They appear in the race browser under category GTA Online.
Exporting to Spooner XML¶
Export the props from any saved race track as a Menyoo Object Spooner-compatible XML file. Use this to back up a track's props, edit them in Spooner, or share the layout with another tool.
From the Race Browser¶
- Open the Race Creation menu.
- Click 📥 Export XML.
- The browser enters Export Mode — click individual map tiles to select them (blue outline = selected).
- Use Select All to select every visible map.
- Click Export (N) when ready. Files are written to
raycin_creator/exports/on the server.
From the Creator¶
- Open a saved/published track in the creator (must have a race ID).
- Open the main creator menu.
- Select Export as Spooner XML.
- File appears in
raycin_creator/exports/on the server.
Files are named <trackname>_<unix_timestamp>.xml. Maximum 50 maps per export batch.
Round-trip: export → edit in Spooner → re-import¶
- Export a track from the creator (above).
- Copy the exported
.xmlfromraycin_creator/exports/tomenyooStuff/Spooner/on your client PC. - Load it in Spooner: Object Spooner → File → Load XML.
- Edit props as needed.
- Re-export from Spooner → copy back to
raycin_creator/xml_imports/. - Import in the creator → publish.
Note: Exporting a track and re-importing it adds props on top of any already on the track — it does not replace them. If you want a clean swap, delete the old props in the creator first.
Deleting Maps¶
Maps can be deleted from within the Race Creator track browser. Deletion is permanent.
How to delete one or more maps¶
- Open Race Creator and go to the main menu (no track loaded).
- Press "Delete Mode" in the track browser.
- Navigate the list and press any map to select it (shows "✓ Selected"). Press again to deselect.
- Press "⚠ Delete N maps" to confirm deletion.
- The deletion runs immediately. A green message confirms how many were deleted.
To exit Delete Mode without deleting, press "Delete Mode" again.
What gets deleted¶
| Storage layer | What is removed |
|---|---|
| JSON file on disk | The track's .json file inside custom_files/<license>/ |
custom_race_list |
The database row for this track |
track_ratings |
All star ratings for this track |
race_sector_bests |
All personal sector-best times |
drift_records |
All drift mode high scores |
race_history |
All recorded race finishes |
| In-memory cache | Server track list rebuilt immediately |
Pre-imported maps (from
local_files/— GTA Online imports): the database row and SQL records are deleted, but the source file on disk is left untouched.
Permissions¶
- Track owner (your license was the original creator): can always delete your own maps.
- Admin (
raycin_creator.accessACE permission): can delete any map. - Others: the server rejects the deletion.
Track Category Picker¶
The Track Category field in Track Settings uses a dedicated submenu instead of a raw text box.
Opening the Picker¶
- Open Race Creator and load or create a track.
- In Track Settings, press Track Category [...].
- The Category Picker submenu opens, listing every category in the database.
Selecting an Existing Category¶
- The currently active category is highlighted in green with a ✓ prefix.
- Press any entry to switch to that category immediately.
- No text entry needed — changes take effect when the track is next saved/published.
Creating a New Category¶
- Scroll to the bottom of the list and press ➕ New Category…
- A text input box opens — type the new category name (max 50 characters).
- Press Enter to confirm. The category is applied to the current track.
Categories are created implicitly — a category exists as long as at least one track references it.
Category Manager (Admin)¶
An admin-only submenu for renaming, merging, and deleting entire track categories.
Requires ACE permission
raycin_creator.access.
Opening the Category Manager¶
- Open Race Creator (main browse screen — no track loaded).
- Press Category Manager in the main menu.
- The submenu opens showing every category with its track count, e.g.
[Street] — 12 tracks.
Rename a Category¶
- Press Rename next to the category.
- Type the new name (max 50 characters).
- Press Enter to confirm.
- All tracks in that category are updated instantly. The old name disappears from picker and manager.
Merge Into Another Category¶
Moves all tracks from one category into another existing category.
- Press Merge into… next to the source category.
- Select the target category from the list.
- All tracks from the source are reassigned to the target.
- The source category disappears (it now has zero tracks).
Example: You have "circut" (typo, 3 tracks) and "Circuit" (9 tracks). Merge "circut" → "Circuit" — all 12 tracks end up under "Circuit".
Delete All Tracks in a Category¶
Permanently deletes every track belonging to a category. Two-step confirmation to prevent accidents.
- Press ⚠ Delete all X tracks next to the category.
- The button changes to "Confirm? Press again to delete" — press it a second time to proceed.
- All tracks are deleted from every storage layer.
- The category disappears from the manager once it has zero tracks.
This cannot be undone. Use Merge into… first if you want to keep the tracks under a different category.
What Happens When a Category is Empty¶
Once all tracks are deleted or moved out of a category, that category name automatically disappears from the Category Picker, Category Manager, and race browser filter sidebar. No manual cleanup needed.
Stats Site — Live Sync¶
The stats site at raycin.com/stats (and localhost/stats locally) reads directly from the same database that raycin_creator and raycin_races write to. There is no separate sync step, no cache to clear, and no manual export. Any change made in-game is visible on the stats site on the next page load.
What updates automatically¶
| Action | Stats site update |
|---|---|
| Publish a new track in raycin_creator | Track appears on the Tracks page immediately |
| Update / re-publish an existing track | Track metadata (name, category, checkpoints, distance, Circuit/P2P) updates immediately |
| Delete a track | Track disappears from the stats site immediately |
| Rename a category (via Category Manager) | All affected tracks update to the new name immediately |
| Merge a category (via Category Manager) | All affected tracks move to the target category immediately |
| Player sets a new track record in a race | Lap Times page and track best-holder update immediately |
| Race finishes and results are logged | Race History and Results pages update immediately |
| Player earns race points | Leaderboard updates immediately |
Category rename — in-game vs database¶
The Category Manager (see above) is the correct way to rename a category. One rename in the manager updates every track in that category in a single operation — the stats site reflects the new name on the next load.
If you ever rename a category by editing the database directly (e.g. in phpMyAdmin), use:
This achieves the same result but bypasses the in-game manager. Either method works — the stats site does not care which was used.One requirement — FiveM server must be running¶
The stats site fetches data from the FiveM HTTP API at runtime. If the FiveM server is offline, the stats site pages will show empty — there is no fallback data store. This applies equally to the local version and raycin.com/stats.
Class Presets — customising¶
This section explains how to make the Apply Preset buttons in RACE DETAIL do exactly what you want — set the allowed vehicle classes for a track AND auto-assign a sensible Default Class and Default Vehicle in one click.
The config lives in:
This file is escrow-readable, so you can edit it directly on the live server (no re-protect needed). Save →restart raycin_creator → your changes are live.
What a preset does (in one click)¶
When you select a preset from RACE DETAIL → 🔧 Apply Preset to this Track (or the bulk-apply version), the system writes three things to the track:
- Default Available VP Classes — the allowed class list (e.g. only Super, Sport, Motorcycle)
- Default Class — which class to start in if not overridden
- Default Vehicle — which specific car to spawn as the default
Default Class and Default Vehicle follow a leave-alone unless invalidated rule — if your track already had a Default Class that survives the new restrictions, it stays as-is. Only an invalid choice gets auto-corrected.
The two preset formats¶
Both work and can be mixed in the same Config.VPClassPresets table.
Format 1 — Legacy (just a class list)¶
Short, no extras. Default Class and Default Vehicle picked automatically (first allowed class + global map).
Format 2 — Rich (table with hints)¶
Use when you want predictable defaults.
["Standard"] = {
classes = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 22 },
preferDefaultClass = 7, -- start in Super by default
defaultVehicle = "adder", -- (optional) override the global map
},
| Field | Type | What it does |
|---|---|---|
classes |
{ classid, ... } |
Required. The allowed vehicle classes. |
preferDefaultClass |
classid (0-22) |
Optional. Preferred Default Class. Must be present in classes — if not, the system uses the first allowed class. |
defaultVehicle |
spawn name like "adder" |
Optional. Forces a specific vehicle. Wins over the global per-class map below. |
The "safe car per class" global map¶
Defined as Config.DefaultVehicleByClass in the same file. One vehicle per class, picked when a preset does not specify its own defaultVehicle.
Config.DefaultVehicleByClass = {
[0] = "blista", -- Compact
[1] = "asea", -- Sedan
[7] = "adder", -- Super
[8] = "bati", -- Motorcycle
-- ... all 23 classes covered out of the box
}
This is your single source of truth for "what car represents class X". Change one line — every preset that picks that class gets the new vehicle on next apply.
Worked examples¶
Example 1 — A simple custom mix¶
- Allowed: Sport and Motorcycle - Default Class: Sport - Default Vehicle:futo (from the global map, since the preset has no defaultVehicle)
Example 2 — Per-preset override¶
- Allowed: only Super - Default Class: Super - Default Vehicle:tezeract (overrides the global adder)
Example 3 — Wacky mix with auto-pick¶
- Allowed: Muscle, Off-Road, Open Wheel - Default Class: Muscle (first in the list, no preference set) - Default Vehicle:buccaneer (from the global map)
Example 4 — Pure legacy format¶
- Allowed: Motorcycle - Default Class: Motorcycle (only option) - Default Vehicle:bati (from the global map)
What gets written to disk¶
Applying a preset updates the track JSON file:
- mission.race.avc ← the classes array
- mission.gen.ivm ← the Default Vehicle as a model hash (only when the current value is missing or now-forbidden)
How errors and edge cases are handled¶
No matter how weird your custom mix gets, the system never crashes — it warns in the server console and uses the safest fallback.
| Situation | Behaviour |
|---|---|
classes = {} (empty) |
Skipped with a console warning |
| Class number outside 0-22 | Warned + dropped from the list |
preferDefaultClass not in classes |
Warned + falls back to first allowed class |
defaultVehicle spawn name is invalid |
Falls back to the global map |
| Class not present in the global map | Falls back to first enabled vehicle in that class |
| Class 21 (Train) included | Warned + dropped (not raceable) |
After restart raycin_creator, check txAdmin console for any [raycin_creator] preset ... warnings to spot config typos.
Workflow tips¶
- Add a new preset: edit
Config.VPClassPresets, add a new entry, save,restart raycin_creator. It appears in the in-game preset picker automatically. - Change a class is fallback car: edit one line in
Config.DefaultVehicleByClass, restart. Every preset that uses that class picks up the new car on next apply. - Force a specific preset to always use a specific car: add
defaultVehicle = "spawnname"to that preset only — leaves the global map untouched for other presets. - Single-track apply does the same job as bulk apply, just on one track. Useful for one-off tweaks.
Limitations¶
Important
- Edits to
Config.VPClassPresetsorConfig.DefaultVehicleByClassrequirerestart raycin_creatoron the server to take effect. - The
config/*.luafiles are escrow-readable, so you can edit them directly on live without re-escrowing the resource. - The system uses "leave alone unless invalidated" for Default Class and Default Vehicle. If you want to force-reset a track, manually clear its Default Vehicle first then re-apply the preset.
- Spawn names must be valid GTA V vehicle models (lowercase, e.g.
adder,bati,futo). Invalid names fall back to the global map. - The bulk-apply hits every track in the chosen category, including standard imports (after this batch is deployed). Use it carefully on large categories like R.ALL (33 tracks).
Per-Preset Blocked Classes¶
In addition to the allowed classes, presets can also list a blocked classes safety net. Anything in blockedClasses is forbidden EVEN IF it also appears in classes — block always wins over allow.
When to use this¶
- You share a preset across many tracks and want a guarantee certain classes can never sneak through (e.g. "Standard never allows Cycle even if I make a config mistake elsewhere").
- You want a "Land Only" preset that permanently blocks Boat / Helicopter / Plane regardless of future edits.
- You inherited a config from someone else and want belt-and-braces protection.
Example¶
["Land Only"] = {
classes = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 22 },
blockedClasses = { 13, 14, 15, 16 }, -- Cycle, Boat, Helicopter, Plane
preferDefaultClass = 7,
},
Apply this preset to a track → the JSON gets:
- mission.race.avc = the allowed list above
- mission.race.blkc = { 13, 14, 15, 16 }
In the race options panel a player picks from avc, but anything in blkc is greyed out and unselectable on top of that.
Backwards compatibility¶
If you omit blockedClasses (or use the legacy array-only preset format), the existing block list on the track is left alone — never cleared. Only a non-empty blockedClasses causes an overwrite.
Per-Category Race Defaults (raycin_races)¶
This is the companion feature on the racing side. It auto-fills the host's race options based on the track's category, so you don't have to set ghost / slipstream / laps / fair start every time you host a race.
Where it lives¶
This file is escrow-readable — live-editable, no re-protect needed. Save →restart raycin_races → defaults are live.
How it works¶
When a host creates a race:
1. Server looks up the track's category (from custom_race_list.category).
2. Finds the matching entry in Config.RaceDefaultsByCategory.
3. For each field listed there, fills it in ONLY IF the host left that field blank in the race-creation form.
4. Anything the host explicitly chose is left alone — defaults are gentle pre-fills, never overrides.
Available fields¶
| Field | What it does | Values |
|---|---|---|
laps |
Race lap count | 1 (hot-lap / drag), 3-5 (circuit), etc. |
weather |
Forces a weather type | "EXTRASUNNY", "CLEAR", "OVERCAST", "RAIN", "THUNDER", "FOGGY", "SMOG", "SNOWLIGHT", "BLIZZARD", "XMAS" |
time |
Forces a time of day | "DAWN", "MORNING", "MIDDAY", "AFTERNOON", "EVENING", "DUSK", "NIGHT", "MIDNIGHT" |
reversed |
Run the track backwards | true / false |
fairStart |
All players spawn at P1 | true / false |
ghostOnContact |
Auto-ghost after prolonged contact | true / false |
slipstream |
Draft / slipstream boost | true / false |
nitro |
Left Shift / L3 nitro | true / false |
catchUp |
Rubber-banding by position | true / false |
fastestLap |
Announce + track fastest lap | true / false |
Worked examples¶
Stunt Race — single lap, ghost ON, slipstream ON¶
Drag Race — fair start, no catch-up¶
Fallback for everything else¶
The special key "*" matches any category that doesn't have its own entry. Use it as a sensible global default:
Live race-time evidence¶
When defaults are applied, the server prints to console:
[raycin_races] race-defaults applied for category=Stunt Race → laps, ghostOnContact, slipstream, fastestLap
Important / Limitations¶
Important
- Defaults apply at race creation, AFTER the host submits the form. If you change the config, players already in a lobby keep their previously-applied defaults — new races created after the restart use the new values.
- The category match is exact and case-sensitive —
"Stunt Race"won't match"stunt race"or"STUNT RACE". Use the exact spelling fromcustom_race_list.category. - Per-category entry wins over the
"*"wildcard. The wildcard only triggers when no specific entry exists. - Defaults never override the host's explicit choices — they only fill blanks. To force-set a field every race, the host must leave that toggle blank in the NUI.
- Some fields (like
laps) are submitted by the form even if at default — in which case the default-fill doesn't trigger. Practical effect:lapsdefaults are most useful when the host doesn't touch the laps field. - Removing a key from
RaceDefaultsByCategoryhas no instant effect on existing races — restart raycin_races to apply changes.
Workflow tip¶
- Find the exact category name for a track via the in-game track list or the
custom_race_list.categorycolumn. - Test on dev first — restart raycin_races, host a race in that category, watch the txAdmin console for the
race-defaults appliedline to confirm what was filled. - Adjust until happy, then sync to live (no re-escrow needed — file is escrow-readable).