Skip to content

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. If open_creator does 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:

add_ace identifier.license:YOUR_LICENSE_HASH raycin_creator.access allow
Or to a whole group:
add_ace group.admin raycin_creator.access allow
The exact ACE permission name is in raycin_creator/config/server_config.lua (default: raycin_creator.access). Some servers also use a SQL-based whitelist (setgroup_creator_permission command). 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 /tag chat 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

  1. Open the creator and select New Track.
  2. Place checkpoints by driving to each location and confirming.
  3. Place at least one prop (see requirement below).
  4. Place your starting grid slots at the start line.
  5. Set the thumbnail (see below).
  6. Set a track name, description, and category in Race Details.
  7. 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.

  1. Open Props in the creator main menu.
  2. Browse the prop list and select any item.
  3. Place it in the world (drive or walk to the location → confirm placement).
  4. 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.

  1. Open the creator main menu → Race Details.
  2. Select 📷 Set Thumbnail.
  3. 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).
  4. Confirm the shot. A small thumbnail preview appears in the Race Details sub-menu.
  5. 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)

  1. Open the creator.
  2. Select Import UGC.
  3. Paste the Rockstar job URL (e.g. https://prod.cloud.rockstargames.com/ugc/gta5mission/...).
  4. The track checkpoints are loaded and converted.
  5. Choose or create a Track Category when prompted.
  6. Optionally edit the Job URL field (auto-filled from the source).
  7. Publish to save the track to the server database.

Editing an Existing Track

  1. Open the creator and browse to the track (admin/creator role required for others' tracks).
  2. Select Edit.
  3. Modify checkpoints, name, description, category, made-by, or job URL.
  4. 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 = false in raycin_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.

  1. Open PLACEMENT → Checkpoints and pick up a checkpoint (have it selected/active).
  2. Click Test — you are spawned at that checkpoint's location; editor UI hides.
  3. Drive through the checkpoint to verify it triggers correctly (check sounds, vehicle transforms, boosts, etc.).
  4. 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

  1. Open PLACEMENT → Templates.
  2. Click Save Template — the current checkpoints, props, and firework configuration are saved as a named template entry.
  3. Up to Config.TemplateLimit templates can be saved (default 30).

Loading a template

  1. Open PLACEMENT → Templates.
  2. Select a saved template from the list.
  3. Choose the placement mode:
  4. World — props/checkpoints land at their original world coordinates.
  5. Relative — offset from your current position.
  6. 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

  1. Open PLACEMENT → Move All.
  2. Use the X, Y, Z sliders to shift the track. Adjust the step size with Change Speed.
  3. Use the Yaw slider to rotate. Adjust the step size with Change Rotation Speed.
  4. All elements update in real time as you scroll.
  5. 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

  1. Open PLACEMENT → Fixture Remover.
  2. The list shows world fixtures near your track. Use Cycle Items to scroll through them.
  3. Highlight the fixture you want to remove → click Select to add it to the removal list.
  4. To undo: highlight it again → click Deselect to remove it from the list.
  5. 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

  1. Open PLACEMENT → Firework.
  2. 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
  1. Set the R / G / B colour sliders (0–255 each) — a live preview plays while the menu is open.
  2. 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

  1. Open the creator and load or create a track.
  2. Open Race Details from the main creator menu.
  3. Select Block VP Classes.
  4. Tick any class you want to prevent the host from selecting.
  5. The button label shows how many classes are currently blocked.
  6. 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

  1. Open the creator and load the track you want to edit.
  2. Open Race Details from the main creator menu.
  3. Select Default Available VP Classes. The submenu opens.
  4. Select 🔧 Apply Preset to this Track. A list of all presets from Config.VPClassPresets appears.
  5. 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).
  6. (Optional) tick / untick individual class checkboxes underneath if this track needs a slight variation from the preset.
  7. 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.

  1. Open the creator and load any track that belongs to the target category. (The category name comes from the track's existing category field.)
  2. Open Race Details → Default Available VP Classes.
  3. Select 📦 Apply Preset to ALL Tracks in [category]. A list of presets appears.
  4. Pick a preset. A confirmation toast appears: "⏳ Applying 'Standard' to all tracks in [Stunt]...".
  5. 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.

  1. Open client_config.lua, confirm Config.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 and restart raycin_creator.
  2. Open the creator. Load any track in the Stunt category.
  3. Open Race Details → Default Available VP Classes → 📦 Apply Preset to ALL Tracks in [Stunt].
  4. Select Standard. Wait a moment.
  5. 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.
  6. 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) but blockedVPClasses = { 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

  1. Open the creator and load or create a track.
  2. Open the Checkpoints sub-menu.
  3. Pick up the checkpoint you want to use as a split.
  4. Find Sector Split in the sub-menu and enable it.
  5. 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, or move).
  • 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.

A Search Models... button appears above the Category and Model lists in the Props sub-menu.

  1. Press Search Models... — a text input box opens.
  2. Type any part of a model name (e.g. bench, ramp, barrier). Case-insensitive, searches across all categories.
  3. Scroll the results list to preview each matching model.
  4. Press Place as normal to place the selected model.
  5. 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

  1. Enable Multi-Select Mode and select the props you want to copy.
  2. Press Copy Selected to Clipboard — saved to raycin_creator/data/prop_clipboard.json.
  3. A notification confirms how many props were saved.

Pasting props

  1. Open a different map in the creator.
  2. Press Paste from Clipboard — the saved props are loaded at their original world coordinates.
  3. 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 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 fireworks still finds ind_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_03 are.)


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, or 15° × 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.

  1. Click Delete All Props — button turns red and changes label to ⚠ CONFIRM: delete all N props?
  2. Click again to confirm. All props are removed instantly.
  3. 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

  1. Place all props in-world. They appear in the Placements list in the Object Spooner menu.
  2. 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.
  3. No-collision props (decorative objects that shouldn't block vehicles): Edit Attributes → Collision → False.
  4. 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

  1. Open the creator → main menu → Import XML Props.
  2. Type the filename (e.g. MyTrackBarriers.xml) and press Enter.
  3. The creator reports: [XML] Imported N props (X skipped).
  4. Props appear in-world at their original coordinates. Use the Props sub-menu to tweak positions.
  5. 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:

add_ace group.admin command.importgto allow

Importing tracks

  1. Use a Tampermonkey script on the Rockstar Social Club races page to download tracks as .json files.
  2. Drop the .json file(s) into raycin_races/gto_import/.
  3. 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

  1. Open the Race Creation menu.
  2. Click 📥 Export XML.
  3. The browser enters Export Mode — click individual map tiles to select them (blue outline = selected).
  4. Use Select All to select every visible map.
  5. Click Export (N) when ready. Files are written to raycin_creator/exports/ on the server.

From the Creator

  1. Open a saved/published track in the creator (must have a race ID).
  2. Open the main creator menu.
  3. Select Export as Spooner XML.
  4. 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

  1. Export a track from the creator (above).
  2. Copy the exported .xml from raycin_creator/exports/ to menyooStuff/Spooner/ on your client PC.
  3. Load it in Spooner: Object Spooner → File → Load XML.
  4. Edit props as needed.
  5. Re-export from Spooner → copy back to raycin_creator/xml_imports/.
  6. 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

  1. Open Race Creator and go to the main menu (no track loaded).
  2. Press "Delete Mode" in the track browser.
  3. Navigate the list and press any map to select it (shows "✓ Selected"). Press again to deselect.
  4. Press "⚠ Delete N maps" to confirm deletion.
  5. 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.access ACE 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

  1. Open Race Creator and load or create a track.
  2. In Track Settings, press Track Category [...].
  3. 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

  1. Open Race Creator (main browse screen — no track loaded).
  2. Press Category Manager in the main menu.
  3. The submenu opens showing every category with its track count, e.g. [Street] — 12 tracks.

Rename a Category

  1. Press Rename next to the category.
  2. Type the new name (max 50 characters).
  3. Press Enter to confirm.
  4. 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.

  1. Press Merge into… next to the source category.
  2. Select the target category from the list.
  3. All tracks from the source are reassigned to the target.
  4. 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.

  1. Press ⚠ Delete all X tracks next to the category.
  2. The button changes to "Confirm? Press again to delete" — press it a second time to proceed.
  3. All tracks are deleted from every storage layer.
  4. 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:

UPDATE custom_race_list SET category = 'New Name' WHERE category = 'Old Name';
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:

resources/[racing-rralan]/raycin_creator/config/client_config.lua
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:

  1. Default Available VP Classes — the allowed class list (e.g. only Super, Sport, Motorcycle)
  2. Default Class — which class to start in if not overridden
  3. 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).

["Sport Only"] = { 6 },     -- just Sport

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

["Sport + Bikes"] = {
    classes            = { 6, 8 },
    preferDefaultClass = 6,
},
- 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

["Hypercar Hour"] = {
    classes            = { 7 },
    preferDefaultClass = 7,
    defaultVehicle     = "tezeract",
},
- Allowed: only Super - Default Class: Super - Default Vehicle: tezeract (overrides the global adder)

Example 3 — Wacky mix with auto-pick

["Wacky"] = { classes = { 4, 9, 22 } },
- 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

["Bikes Only"] = { 8 },
- 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.VPClassPresets or Config.DefaultVehicleByClass require restart raycin_creator on the server to take effect.
  • The config/*.lua files 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

resources/[racing-rralan]/raycin_races/config/config_server.lua
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

["Stunt Race"] = {
    laps           = 1,
    ghostOnContact = true,
    slipstream     = true,
    fastestLap     = true,
},

Drag Race — fair start, no catch-up

["Drag Race"] = {
    laps           = 1,
    fairStart      = true,
    ghostOnContact = false,
    catchUp        = false,
},

Fallback for everything else

The special key "*" matches any category that doesn't have its own entry. Use it as a sensible global default:

["*"] = {
    laps           = 3,
    ghostOnContact = true,
    slipstream     = true,
    fastestLap     = true,
},

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
If no field was applied (host filled in everything), no line is printed.

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 from custom_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: laps defaults are most useful when the host doesn't touch the laps field.
  • Removing a key from RaceDefaultsByCategory has 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.category column.
  • Test on dev first — restart raycin_races, host a race in that category, watch the txAdmin console for the race-defaults applied line to confirm what was filled.
  • Adjust until happy, then sync to live (no re-escrow needed — file is escrow-readable).