What follows is drawn from the mod's real layout files and textures, so it is what the engine renders. Click the rows and tabs in the menu.
The marshal menu: routes on the left, the route card on the right, Arm / Create heat / Close on the bottom rail. Leaderboard, Prizes and Admin on their own tabs.
Timed checkpoint races for cars, bikes, boats and helicopters. Marshal NPCs you place and dress, routes you lay out by driving them, tiered prizes, per-route leaderboards, group heats with a shared start, and an optional Discord feed. No other mod required. Three small text files run it all; this guide explains every line in plain language.
1. Install in five minutes
- Subscribe to the mod on the Workshop (or copy the
@EDZ_Racingfolder next to your other mods). - Add
@EDZ_Racingto the-mod=list of your server and of your players. It is a client + server mod. - Copy the
.bikeyfrom@EDZ_Racing\keysinto your server'skeysfolder. - Start the server once. The mod creates
profiles\EDZ_Racing\with three files:
| File | What it holds |
|---|---|
Settings.json | timings, rules, vehicle categories, Discord, admin IDs |
Routes.json | the races: start, gates, limits, prizes |
Marshals.json | the NPCs players talk to |
- Open
Settings.json, put your own ID intoAdminUIDs(Steam64 or the hashed DayZ ID), then restart or use the Admin
tab's Reload config. You now see the Admin tab in game, and with it the route recorder.
Every line in the files has a // comment explaining it. Comments are ignored by the mod. 1 means on, 0 means off. The files the mod writes contain one example marshal and one example circuit so you can see the shape; replace both.
2. How a race works for a player
- Walk up to a marshal, press F. The Race tab lists the routes that marshal offers with category, length and
your best time. The card shows the description, the gates, the time limits and the prize tiers.
- Arm a race. You now have a window (
ArmSeconds) to get into a vehicle of the right category and drive to the
start gate. The HUD chevron points at it.
- Sit inside the start gate in a valid vehicle, driver's seat, engine running. A 3-2-1-GO countdown runs and the clock
starts on GO. Leaving the gate or switching the engine off during the countdown cancels it.
- Take the gates in order. The HUD shows the time, the next gate number and its distance, LAP n/N on multi-lap routes.
Gate notifications show your split. The vanilla map shows every gate.
- Cross the finish gate. Helicopter routes can require a landing. Your time is compared with the route's tiers: the best
tier you beat is yours. The board updates, a new record is announced, Discord gets a post if enabled.
- Prizes are collected at any marshal, in the Prizes tab, never dropped into a moving vehicle.
A run ends with nothing if the racer leaves the vehicle for longer than the grace period, changes vehicle, dies, runs out of a time limit, or presses the abandon key (End) twice. Several players can race at once on the same or different routes; gates are positions, not objects, so nobody gets in anyone's way.
3. Heats: racing against each other
- In the Race tab a player presses Create heat for a route. Others at the marshal press Join heat. One heat per
route at a time; an unstarted lobby is dropped after HeatLobbyTimeoutSeconds.
- The host presses Start heat (needs
HeatMinPlayers). Everyone drives to the start gate in their own time; the
HUD shows who is lined up and how long is left.
- The final shared countdown (
HeatGoCountdownSeconds) starts automatically when every racer is inside
HeatStagingRadius of the start gate in a valid vehicle, or when the staging window (HeatStagingTimeoutSeconds) closes, so one straggler cannot hold the field. On GO every clock starts together.
- Live positions (P2/5) on the HUD, splits at every gate, every finish announced to the heat with its place. The heat
closes when everyone has finished or dropped, or HeatMaxSeconds after GO.
- Finishers get the route's time tiers and participation prizes as usual, plus
HeatPrizesby finishing place. The
result goes to the Leaderboard tab under "Recent heats" and to Discord if WebhookOnHeat is on.
Because the start is wherever the start gate is and the clocks start together on GO, a marshal can stand anywhere and offer routes all over the map.
4. Settings.json
"TickSeconds": 0.5,
"ArmSeconds": 600,
"StartRadius": 12,
"SoloCountdownSeconds": 3,
"RequireEngineOn": 1,
"LeaveVehicleGraceSeconds": 10,
"ReconnectGraceSeconds": 90,
"DriverOnly": 1,
"AllowVehicleChange": 0,
"LeaderboardSize": 10,
"MarshalTalkDistance": 6,
"AnnounceRecordsToAll": 1,
"ShowHudMarker": 1,
"ShowGatesOnVanillaMap": 1,
| Field | Meaning |
|---|---|
TickSeconds | How often the race engine checks every racer. 0.5 is right for cars; leave it. |
ArmSeconds | Solo: seconds to reach the start gate after arming. Routes can override it. |
StartRadius | Metres around the start position that count as "on the line". |
SoloCountdownSeconds | Length of the 3-2-1-GO for solo starts. 0 = the clock starts the moment you are on the line. |
RequireEngineOn | The engine must be running to start, or to count as lined up in a heat. |
LeaveVehicleGraceSeconds | Out of the vehicle longer than this and the run fails. Lets a racer flip a car back over. |
ReconnectGraceSeconds | A disconnected racer keeps the run this long, clock still running, and may re-enter the vehicle. |
DriverOnly | Only the driver's run counts. Passengers get nothing. |
AllowVehicleChange | 1 lets racers swap vehicles mid-race. Off by default. |
LeaderboardSize | Entries kept per route. |
MarshalTalkDistance | How close a player must be for the F prompt on a marshal. |
AnnounceRecordsToAll | Tell everyone online about a new track record. |
ShowHudMarker | The chevron with gate number and distance over the next gate. |
ShowGatesOnVanillaMap | Gate marks on the in-game map while armed or racing. |
"DiscordWebhookUrl": "",
"WebhookOnFinish": 0,
"WebhookOnPodium": 1,
"WebhookOnRecord": 1,
"WebhookOnHeat": 1,
"WebhookServerName": "My DayZ server",
| Field | Meaning |
|---|---|
DiscordWebhookUrl | The full webhook URL from your Discord channel settings. Empty = no Discord posts. |
WebhookOnFinish | Post every single finish. Noisy on a busy server. |
WebhookOnPodium | Post finishes that land in the top three of a board. |
WebhookOnRecord | Post new track records. |
WebhookOnHeat | Post heat results with the finishing order. |
WebhookServerName | The server name shown in the post. |
"HeatStagingTimeoutSeconds": 600,
"HeatStagingRadius": 40,
"HeatGoCountdownSeconds": 10,
"HeatLobbyTimeoutSeconds": 300,
"HeatMinPlayers": 2,
"HeatMaxSeconds": 900,
"HeatPositionUpdateSeconds": 2,
| Field | Meaning |
|---|---|
HeatStagingTimeoutSeconds | How long the field has to reach the start gate after Start heat. Then GO, with or without stragglers. Routes can override it. |
HeatStagingRadius | Metres from the start gate that count as lined up. Wider than the solo radius so a field fits. |
HeatGoCountdownSeconds | The shared countdown once everyone is lined up. |
HeatLobbyTimeoutSeconds | An unstarted lobby is dropped after this. |
HeatMinPlayers | Players needed before the host can press Start heat. |
HeatMaxSeconds | The heat closes this long after GO. Racers still out are DNF. |
HeatPositionUpdateSeconds | How often the live position on the HUD refreshes. |
"AdminUIDs": ["76561190000000000"],
"Categories": [
{ "Name": "Heli", "BaseClasses": ["ExpansionHelicopterScript", "ExpansionVehicleHelicopterBase", "RFFSHeli_Base"] },
{ "Name": "Bike", "BaseClasses": ["Motorbike", "Motorbike_01_ColorBase", "Bicycle"] },
{ "Name": "Boat", "BaseClasses": ["BoatScript", "ExpansionBoatScript", "ExpansionVehicleBoatBase"] },
{ "Name": "Car", "BaseClasses": ["CarScript"] }
]
| Field | Meaning |
|---|---|
AdminUIDs | Who sees the Admin tab. Steam64 (17 digits) or the hashed DayZ ID (44 characters ending in =). |
Categories | The vehicle classes, in order. A vehicle belongs to the first category whose BaseClasses it inherits from. Many modded helicopters and boats inherit from CarScript underneath, so keep Heli, Bike and Boat above Car. |
Name | The category name routes refer to. |
BaseClasses | Config classes. To add a modded vehicle, add its class name or one of its parents. The server log says "Unknown vehicle type <class>" when a vehicle fits no category. |
5. Routes.json
The easiest way to make a route is to drive it with the recorder (section 7). This is what the recorder writes and what you can tune afterwards.
{
"ID": "harbour_sprint",
"Name": "Harbour Sprint",
"Category": "Car",
"Description": "Along the quay, round the cranes, back to the gate.",
"Start": [10060, 0, 11061],
"Checkpoints": [
{ "Position": [10260, 0, 11061], "Radius": 15 },
{ "Position": [10260, 0, 11261], "Radius": 15 },
{ "Position": [10060, 0, 11061], "Radius": 15 }
],
"Laps": 1,
"LegTimeLimitSeconds": 180,
"MaxTotalSeconds": 0,
"RequireStopAtFinish": 0,
"ArmSeconds": 0,
"HeatStagingTimeoutSeconds": 0,
"AllowedVehicles": [],
"BlockedVehicles": [],
"Tiers": [
{ "Name": "Gold", "MaxSeconds": 90, "Prizes": [ { "ClassName": "Money_Dollar100", "Quantity": 50, "Attachments": [] } ] },
{ "Name": "Silver", "MaxSeconds": 120, "Prizes": [ { "ClassName": "Money_Dollar100", "Quantity": 25, "Attachments": [] } ] },
{ "Name": "Bronze", "MaxSeconds": 180, "Prizes": [ { "ClassName": "Money_Dollar100", "Quantity": 10, "Attachments": [] } ] }
],
"ParticipationPrizes": [],
"HeatPrizes": [
{ "Place": 1, "Prizes": [ { "ClassName": "Money_Dollar100", "Quantity": 100, "Attachments": [] } ] }
]
}
| Field | Meaning |
|---|---|
ID | Unique key for boards, admin commands and marshal route lists. Never rename it once people have times. |
Name | Shown in the menu. |
Category | Car, Bike, Boat or Heli: a category Name from Settings.json. |
Description | Shown on the route card. |
Start | The start gate [x, y, z]. y 0 = ground. |
Checkpoints | The gates in driving order. The last one is the finish. Each has a Position and a Radius in metres: 15 for cars and bikes, 25 for boats, 40 for helicopters are good values. Air gates need a real y. |
Laps | Drive the gate list this many times. The finish only counts on the last lap. Lay a circuit out once and reuse it for three-lap races. |
LegTimeLimitSeconds | Maximum seconds between two gates. 0 = none. |
MaxTotalSeconds | Maximum seconds for the whole run. 0 = none. |
RequireStopAtFinish | The vehicle must be stationary inside the finish gate. For helicopters: land it. |
ArmSeconds | This route's own solo arming window. 0 = the global value. |
HeatStagingTimeoutSeconds | This route's own heat staging window. 0 = the global value. |
AllowedVehicles | Exact class names. Empty = any vehicle of the category. Use it for one-make races. |
BlockedVehicles | Exact class names that may not race this route. |
Tiers | Time tiers with prizes. They are sorted automatically and the first tier the racer beats is the one they get. |
MaxSeconds | Finish at or under this to earn the tier. |
Prizes | Items collected at any marshal. ClassName, Quantity (stack size for money and ammo, item count otherwise), Attachments (classes attached to the item, e.g. a magazine on a rifle). |
ParticipationPrizes | Given on every finish, whatever the time. |
HeatPrizes | Heats only, by finishing Place (1 = winner), on top of tiers and participation prizes. |
6. Marshals.json
{
"Name": "Marshal Reyes",
"ClassName": "EDZ_RacingMarshal",
"Position": [10050, 0, 11050],
"Orientation": [90, 0, 0],
"Clothing": ["BaseballCap_Red", "TShirt_Red", "Jeans_Blue", "AthleticShoes_Black", "HighCapacityVest_Black"],
"InHands": "Megaphone",
"Routes": []
}
| Field | Meaning |
|---|---|
Name | Shown in the menu header. |
ClassName | EDZ_RacingMarshal (Mirek) or EDZ_RacingMarshal_Boris, _Denis, _Linda, _Eva, _Judy. |
Position | [x, y, z], y 0 = ground. Pick open ground; the marshal stands still. |
Orientation | [yaw, pitch, roll] in degrees. Yaw is the facing direction. |
Clothing | Any wearable classes; the right slot is found automatically. |
InHands | An item to hold, or empty. |
Routes | Route IDs this marshal offers. Empty = every route. |
Marshals cannot be damaged, looted or moved. Place them where infected are not a problem, since they are people as far as the infected are concerned.
7. Building routes in game: the recorder and the Admin tab
With your ID in AdminUIDs, talk to a marshal and open the Admin tab.
Recording a route
- Type a route id in the box top right, optionally followed by the race type:
harbour,harbour boat,ridge heli.
Without a type, the vehicle you sit in at the first drop decides.
- Press Record route, get in the vehicle and drive the lap. Press the abandon key (End) at the start line, at every
gate and at the finish.
- Press Stop & save. The route is appended to Routes.json and is live immediately: category from your vehicle, gate
radius by category, Gold / Silver / Bronze set at 1.05, 1.25 and 1.6 times your reference lap rounded up to five seconds, a total limit of three laps' worth, landing required on helicopter routes. Prizes are empty until you add them in the file. Cancel with the Action button while nothing is selected.
Other admin commands: cancel a player's active run, reload the three files, wipe a route's board.
8. Tips
- Money as prizes:
Quantityon money is the stack size, soMoney_Dollar100withQuantity50 is 5 000 dollars in one stack. - Modded vehicles that do not race: look for "Unknown vehicle type" in the server log and add the class it names, or one of its parents, to the right category.
- A helicopter route: 40 m gates in the air with a real
y,RequireStopAtFinish1 so they must land. - One-make race:
AllowedVehicleswith the exact class, e.g. a single buggy model. - Keep Expansion's map happy: the vanilla map shows gates out of the box. Map mods that replace the in-game map need their own marker add-on; the HUD chevron works everywhere.
- Restarts: boards and player files are written the moment they change. A run in progress does not survive a server restart; those racers are told their run was voided when they return.
9. If something does not work
| Symptom | Check |
|---|---|
| No marshal | The start log names any clothing it could not put on; a wrong ClassName is reported and the marshal skipped. |
| Arming refused in a vehicle | Wrong category: the log says "Unknown vehicle type" or the vehicle inherits a class in another category. |
| The clock never starts | Engine off (RequireEngineOn), passenger seat (DriverOnly), or outside StartRadius. |
| Gates not counting | Gates must be taken in order; the HUD shows which is next. Radius too small for the speed is the usual cause. |
| Whole file ignored | A JSON error: missing comma or bracket. The log says JSON parse error with a hint. |
| No Admin tab | Your ID is not in AdminUIDs, or no restart / reload since you added it. |
All of the mod's lines in the server log start with [EDZ_Racing].
What the racer sees
While armed or racing the HUD stays out of the way: one line at the top with the time, lap and position, and a chevron with the gate number and distance floating over the next gate.
Mid-race: clock top centre, chevron on gate 2 of 3.