EDZ Racing

Server owner's guide

Timed checkpoint races for cars, bikes, boats and helicopters: marshals you place, routes you record by driving them, tiered prizes, leaderboards and group heats. Three small files run it all; this page explains every line.

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.

CLOSE
RACE
LEADERBOARD
PRIZES
ADMIN
Route
TYPE: AUTO
new_route
ROUTES
DETAILS
PRIZES
HEAT
ARM RACE
CREATE HEAT
REFRESH

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

  1. Subscribe to the mod on the Workshop (or copy the @EDZ_Racing folder next to your other mods).
  2. Add @EDZ_Racing to the -mod= list of your server and of your players. It is a client + server mod.
  3. Copy the .bikey from @EDZ_Racing\keys into your server's keys folder.
  4. Start the server once. The mod creates profiles\EDZ_Racing\ with three files:
FileWhat it holds
Settings.jsontimings, rules, vehicle categories, Discord, admin IDs
Routes.jsonthe races: start, gates, limits, prizes
Marshals.jsonthe NPCs players talk to
  1. Open Settings.json, put your own ID into AdminUIDs (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

  1. 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.

  1. 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.

  1. 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.

  1. 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.

  1. 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.

  1. 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

  1. 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.

  1. 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.

  1. 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.

  1. 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.

  1. Finishers get the route's time tiers and participation prizes as usual, plus HeatPrizes by 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,
FieldMeaning
TickSecondsHow often the race engine checks every racer. 0.5 is right for cars; leave it.
ArmSecondsSolo: seconds to reach the start gate after arming. Routes can override it.
StartRadiusMetres around the start position that count as "on the line".
SoloCountdownSecondsLength of the 3-2-1-GO for solo starts. 0 = the clock starts the moment you are on the line.
RequireEngineOnThe engine must be running to start, or to count as lined up in a heat.
LeaveVehicleGraceSecondsOut of the vehicle longer than this and the run fails. Lets a racer flip a car back over.
ReconnectGraceSecondsA disconnected racer keeps the run this long, clock still running, and may re-enter the vehicle.
DriverOnlyOnly the driver's run counts. Passengers get nothing.
AllowVehicleChange1 lets racers swap vehicles mid-race. Off by default.
LeaderboardSizeEntries kept per route.
MarshalTalkDistanceHow close a player must be for the F prompt on a marshal.
AnnounceRecordsToAllTell everyone online about a new track record.
ShowHudMarkerThe chevron with gate number and distance over the next gate.
ShowGatesOnVanillaMapGate marks on the in-game map while armed or racing.
"DiscordWebhookUrl": "",
"WebhookOnFinish": 0,
"WebhookOnPodium": 1,
"WebhookOnRecord": 1,
"WebhookOnHeat": 1,
"WebhookServerName": "My DayZ server",
FieldMeaning
DiscordWebhookUrlThe full webhook URL from your Discord channel settings. Empty = no Discord posts.
WebhookOnFinishPost every single finish. Noisy on a busy server.
WebhookOnPodiumPost finishes that land in the top three of a board.
WebhookOnRecordPost new track records.
WebhookOnHeatPost heat results with the finishing order.
WebhookServerNameThe server name shown in the post.
"HeatStagingTimeoutSeconds": 600,
"HeatStagingRadius": 40,
"HeatGoCountdownSeconds": 10,
"HeatLobbyTimeoutSeconds": 300,
"HeatMinPlayers": 2,
"HeatMaxSeconds": 900,
"HeatPositionUpdateSeconds": 2,
FieldMeaning
HeatStagingTimeoutSecondsHow long the field has to reach the start gate after Start heat. Then GO, with or without stragglers. Routes can override it.
HeatStagingRadiusMetres from the start gate that count as lined up. Wider than the solo radius so a field fits.
HeatGoCountdownSecondsThe shared countdown once everyone is lined up.
HeatLobbyTimeoutSecondsAn unstarted lobby is dropped after this.
HeatMinPlayersPlayers needed before the host can press Start heat.
HeatMaxSecondsThe heat closes this long after GO. Racers still out are DNF.
HeatPositionUpdateSecondsHow 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"] }
]
FieldMeaning
AdminUIDsWho sees the Admin tab. Steam64 (17 digits) or the hashed DayZ ID (44 characters ending in =).
CategoriesThe 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.
NameThe category name routes refer to.
BaseClassesConfig 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": [] } ] }
  ]
}
FieldMeaning
IDUnique key for boards, admin commands and marshal route lists. Never rename it once people have times.
NameShown in the menu.
CategoryCar, Bike, Boat or Heli: a category Name from Settings.json.
DescriptionShown on the route card.
StartThe start gate [x, y, z]. y 0 = ground.
CheckpointsThe 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.
LapsDrive 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.
LegTimeLimitSecondsMaximum seconds between two gates. 0 = none.
MaxTotalSecondsMaximum seconds for the whole run. 0 = none.
RequireStopAtFinishThe vehicle must be stationary inside the finish gate. For helicopters: land it.
ArmSecondsThis route's own solo arming window. 0 = the global value.
HeatStagingTimeoutSecondsThis route's own heat staging window. 0 = the global value.
AllowedVehiclesExact class names. Empty = any vehicle of the category. Use it for one-make races.
BlockedVehiclesExact class names that may not race this route.
TiersTime tiers with prizes. They are sorted automatically and the first tier the racer beats is the one they get.
MaxSecondsFinish at or under this to earn the tier.
PrizesItems 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).
ParticipationPrizesGiven on every finish, whatever the time.
HeatPrizesHeats 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": []
}
FieldMeaning
NameShown in the menu header.
ClassNameEDZ_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.
ClothingAny wearable classes; the right slot is found automatically.
InHandsAn item to hold, or empty.
RoutesRoute 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

  1. 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.

  1. 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.

  1. 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

9. If something does not work

SymptomCheck
No marshalThe start log names any clothing it could not put on; a wrong ClassName is reported and the marshal skipped.
Arming refused in a vehicleWrong category: the log says "Unknown vehicle type" or the vehicle inherits a class in another category.
The clock never startsEngine off (RequireEngineOn), passenger seat (DriverOnly), or outside StartRadius.
Gates not countingGates must be taken in order; the HUD shows which is next. Radius too small for the speed is the usual cause.
Whole file ignoredA JSON error: missing comma or bracket. The log says JSON parse error with a hint.
No Admin tabYour 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.