The Creator#
/biohazardcreator opens the creator. The saved outbreaks are listed on the left, with a search box and New event; the selected one opens on the right, split into seven sections. The event that is running right now is tagged RUNNING.
Button | What it does |
|---|---|
New event | Opens a blank event, pre-filled from |
Create · Save | Stores the event. Every value is checked and clamped by the server, so nothing out of range reaches the database. |
Start | Launches the selected event for the whole server and closes the creator, dropping you straight into it. |
Stop event | Ends the running event for everyone, exactly as if its timer had run out. |
Delete | Removes the preset for good, after a confirmation. |
One outbreak runs at a time. Starting an event while another is running does nothing — stop the first one before launching the next.
Designing an Event#
Each section of the editor sets one part of the outbreak. The ranges below are the limits the server enforces.
General#
Field | Range | What it does |
|---|---|---|
Event name | Up to 120 characters | Shown in the creator, the phone app and the server console. |
Duration | 1 – 1,440 minutes | How long the outbreak lasts. Default 15. |
Event Area#
Field | Range | What it does |
|---|---|---|
Area type | Whole map · Zone (polygon) | Whole map affects every player at once. A zone only affects players standing inside it. |
Draw zone area | At least 3 corners | Opens the zone picker — see Drawing a Zone. A zone with fewer than three corners is saved as whole map. |
Show map blip | On · off | A named blip at the zone's centre. |
Show radius on map | On · off | A translucent circle covering the zone. |
Blip sprite | Picker with pictures | Any GTA blip, chosen from a searchable list. Default 484, the biohazard symbol. |
Blip color | GTA colours | The colour of both the blip and the radius. |
Blips only appear on zone events: a whole-map outbreak has nothing to mark.
Ambience#
Field | Range | What it does |
|---|---|---|
Game hour | 0 – 23 | The hour the clock is set to. Default 22. |
Freeze time | On · off | Holds the clock at that hour for the whole event. |
Blackout | On · off | Switches off the city's lights, vehicle lights included. |
Force weather | On · off | Locks the weather chosen below. |
Weather | CLEAR · EXTRASUNNY · CLOUDS · OVERCAST · RAIN · THUNDER · FOGGY · SMOG · HALLOWEEN · XMAS · NEUTRAL · SNOW · BLIZZARD | Shown while Force weather is on. Default FOGGY. |
Timecycle strength | 0 – 100% | How strong the Halloween visual filter is. The filter itself is fixed; 0% turns it off. |
Enable intro/outro visual | On · off | Plays the intro overlay when a player enters the outbreak and the ending overlay when it ends. |
Zombies#
Field | Range | What it does |
|---|---|---|
Zombie model | A ped spawn name | Used for the AI horde and for infected players. Default |
AI damage scale | 0 – 2 | How hard the horde hits. 0.25 is 75% less damage than normal. |
Movement speed | 0.5 – 10 | The horde's base pace. Default 3. |
Move rate override | 1 – 20 | The multiplier that makes them rabid. Default 10; lower it for slow, shambling walkers. |
Turn infected players into the zombie model | On · off | Off keeps the player's own look, with the zombie gait. |
Horde & Spawn#
Field | Range | What it does |
|---|---|---|
Base horde size | 0 – 500 | The horde's starting size. Default 8. |
Extra per player | 0 – 100 | Added for every player online. Default 3. |
Spawn radius min · max | 5 – 500 · 10 – 1,000 m | How far from a player zombies appear on whole-map events. Default 25 – 60. |
Max zombies (global) | 1 – 600 | Hard cap on the whole horde, for performance. Default 120. |
Spawn burst max | 1 – 60 | The most zombies requested in one wave. Default 12. |
The target horde is base + players online × extra per player, never above the global cap. Every two seconds the server tops the horde back up, spreading the new spawns across the players. Dead zombies disappear and are replaced in the next wave, so the pressure never lets up.
Infection#
Field | Range | What it does |
|---|---|---|
Hits to infect | 1 – 50 | Zombie hits a human takes before turning. Default 3. |
Infect window | 10 – 3,600 s | How long an infected player has to infect someone. Default 90. |
Zombie dies if it does not infect in time | On · off | Off lets infected players roam with no clock at all. |
Rewards#
Field | Range | What it does |
|---|---|---|
Reward survivors | On · off | Pays every player who ends the event as a human. Off by default. |
Money per survivor | 0 – 1,000,000,000 | Cash for each survivor. |
Item name · amount | Item spawn name · 1 – 1,000 | An item for each survivor. Empty gives none. |
Drawing a Zone#
Pick Zone (polygon) and press Draw zone area. The creator hides, your character is frozen and a camera lifts into the sky above you. A marker on the ground shows where the camera is pointing.
Key | Does |
|---|---|
| Fly the camera. |
| Up / down. |
| Fly faster. |
Mouse | Look around. |
Left click | Add a corner where the marker is. |
Right click | Remove the last corner. |
Mouse wheel | Change the zone's height, from 2 to 200. It starts at 50. |
| Confirm. Needs at least three corners. |
| Cancel without changing the area. |
The outline is drawn as walls between numbered corners: red while there are fewer than three, green once it is a valid zone. Confirm and the creator comes back with the number of corners — save the event to keep them.
Height matters. A zone reaches above its highest corner and below its lowest by a margin that grows with its height — about 20 m each way at the default 50 — so a tall zone also catches rooftops and tunnels, and a flat one keeps the event at street level.
How an Outbreak Plays#
The outbreak begins
Every online player reads The Biohazard night has begun!, the chat announces it and phones get a notification. A timer appears at the bottom of the screen.
Night falls
The hour, weather, blackout and filter apply, the horde's damage is scaled, and the intro plays with a laugh. While the intro is on screen, the horde holds off chasing you.
The horde rises
Zombies spawn around players in waves, wander, and run at the nearest human within 400 m. Close up, they switch to melee.
Infection
Each zombie hit counts, knocks the survivor down for a moment and blurs their vision. Survivors are never killed by the horde: their health is held above a safety floor. On the last hit they read You are infected! Transforming..., are untouchable for a moment, and stand up as a zombie in a burst of particles everyone can see — zombie model, staggering gait, no weapons.
The hunt
A zombie player infects by hitting humans. Every human they infect resets their window and counts on their record; the timer shows how long they have left. If it reaches zero and the event uses Zombie dies if it does not infect in time, they drop and come back human. Zombie players cannot hurt each other, and survivors can shoot them down for a kill.
The end
When the timer runs out or an admin presses Stop event, every zombie disappears. Players who finished human read You won! You survived the horde. and receive the event's rewards; the rest read You lost: you finished as a zombie. The ending overlay plays, the weather and clock return (EXTRASUNNY at 12:00 by default), clothes are restored, and everyone's XP is saved.
Whole map or zone#
Behaviour | Whole map | Zone |
|---|---|---|
Who takes part | Every online player, at once. | Players inside the polygon, while they are inside. |
Weather, time, intro | Applied to everyone at the start. | Applied when a player walks in, removed when they walk out. |
Where zombies spawn | In a ring around each player, between the minimum and maximum spawn radius. | Anywhere inside the zone, at least 8 m from the player. |
Where zombies go | Anywhere. | They stay inside — one that strays walks back to the centre — and never chase a player who is outside. |
Infect window | Always running. | Paused while the zombie player is outside the zone. |
On the map | Nothing. | A blip and a radius, plus green walls drawn in the world for anyone within 350 m. |
Players who connect during an outbreak are dropped straight into it, with the time that is left.
The Scoreboard#
Press Z during an outbreak for the live kill ranking: every participant's kills, whether they are human or zombie, their level, and the time left, with your own row marked You. It refreshes every two seconds and stays on screen without taking the mouse.
Config.Scoreboard | Default | What it does |
|---|---|---|
| true | The ranking and its key. |
| 'Z' | The default key. Players can rebind it under Settings → Key Bindings → FiveM → Biohazard: Show kill scoreboard. |
| false |
|
| true | Only while an outbreak runs — and on zone events, only inside the zone. |
| 2000 | How often the ranking is refreshed, in milliseconds. |
| 25 | Players listed. |
| true | Shooting down an infected player counts as a kill, as well as AI zombies. |
A new
Keyonly reaches new players. GTA stores each player's binding the first time they join, so existing players keep the old key until they rebind it themselves.
Levels and Ranks#
Every outbreak ends with XP for everyone who took part. XP adds up for good and the level is worked out from the total, so progress survives restarts and shows in the scoreboard and the phone app.
Action | Config.Levels.XP | XP |
|---|---|---|
Taking part |
| 25 |
Each zombie killed, AI or player |
| 12 |
Each human infected as a zombie |
| 18 |
Ending the event human |
| 120 |
Ending the event as a zombie |
| 35 |
MVP — the event's top killer |
| +80 |
A survivor with ten kills earns 25 + 120 + 10 × 12 = 265 XP; as the MVP, 80 more.
The XP needed to go from one level to the next is floor(base × level ^ exponent). With the defaults — base 140, exponent 1.45, maximum level 60:
Level | XP to the next | Total XP to reach it |
|---|---|---|
1 | 140 | 0 |
5 | 1,444 | 2,254 |
10 | 3,945 | 14,172 |
20 | 10,780 | 82,663 |
30 | 19,406 | 227,992 |
60 (max) | — | 1,272,035 |
Raise the exponent for a steeper late game, or lower the base to level faster early on. Ranks are cosmetic titles unlocked by level:
Level | Rank |
|---|---|
1 | Rookie |
6 | Survivor |
12 | Hunter |
20 | Slayer |
30 | Veteran |
42 | Nightmare |
55 | Legend |
Config.Levels = {
Enabled = true, -- false: no XP, and the phone app hides progression
MaxLevel = 60,
XP = { participate = 25, kill = 12, infect = 18, win = 120, loss = 35, mvpBonus = 80 },
Curve = { base = 140, exponent = 1.45 },
Ranks = {
{ level = 1, key = 'rookie' },
{ level = 6, key = 'survivor' },
-- ...
{ level = 55, key = 'legend' }
}
}Each player's record also keeps their games, wins, losses, best kills in a single event and MVPs. The phone app translates each rank key; a key it does not know is shown as written.
Auto Start#
With Auto Start on, the server launches an outbreak by itself every MinHours to MaxHours, with a fresh random delay each time. It picks a random saved preset — or the default template when there are none — and skips its turn if an outbreak is already running.
Config.AutoStart = {
Enabled = true,
MinHours = 2,
MaxHours = 5,
AnnounceInChat = true -- the chat line on every start, manual ones included
}The console tells you when the next one is due: [Biohazard] Auto-start in 187 minutes...
Advanced Settings#
The bottom of config.lua tunes how every outbreak feels. The defaults are balanced; change one thing at a time.
Zombie gait and AI
Config.ZombieModelProfiles = {
[`u_m_y_zombie_01`] = {
sets = { 'move_m@drunk@verydrunk' }, -- the walk for this model
ragdoll = 1000 -- ms a player is knocked down by its hit
},
}
Config.ZombieDefaultAnimSets = { 'move_m@drunk@verydrunk' } -- models not listed above
Config.PlayerHitRagdollMsDefault = 1000
Config.RagdollCooldownMs = 1200 -- no chain knock-downs
Config.AI_RetaskMs = 100 -- how often a zombie re-picks its target
Config.AI_MeleeStartRange = 5.5 -- distance at which it switches to melee
Config.AI_MaxChaseDist = 400.0 -- furthest a zombie will chase a playerUsing another zombie model? Give it its own walk and knock-down time in ZombieModelProfiles.
Infection internals
Config.HitCooldownMs = 400 -- minimum time between two counted hits
Config.NearZombieRange = 3.0 -- a hit only counts with a zombie this close
Config.HPFloorOnHit = 140 -- health a survivor is held at on a zombie hit
Config.HPMinSafety = 125 -- health survivors never drop below
Config.InfectGraceMs = 1500 -- untouchable while transforming
Config.ServerReplyTimeout = 2000 -- retry the infection if the server is slow
Config.InfectCreditRadius = 4.0 -- the zombie player this close gets the infectionOn-screen timer
Config.DrawTimer = true -- the event timer, and a zombie's infect timer
Config.DrawTimerScale = 0.5
Config.DrawTimerY = 0.90 -- 0.0 top of the screen, 1.0 bottomCleanup and restore
Config.DeleteDeadZombies = true
Config.CleanUpOnStop = true
Config.RestoreWeatherTo = 'EXTRASUNNY' -- weather when the event ends
Config.RestoreHourTo = 12 -- hour when the event endsRunning a weather or time sync script? It takes over again at its next update, so these values only matter for the first moments after the outbreak.
Intro and ending overlays
Config.IntroImage = {
enable = true,
url = 'intro.gif',
duration = 4000, -- ms; the horde also waits this long before chasing
sound = { enable = true, url = 'sounds/evil_laugh.mp3', volume = 0.2 }
}
Config.EndImage = {
enable = true,
url = 'ending.gif',
duration = 1800,
sound = { enable = true, url = 'sounds/evil_laugh.mp3', volume = 0.2 }
}These switch the overlays off server-wide. To turn them off for a single event, use Enable intro/outro visual in its Ambience section.
Screen effects
-- Dizzy pulses while a survivor is being infected
Config.InfectionDrunk = {
Enabled = true, DurationMs = 6000, ExtendOnHitMs = 2000, CamShakeAmp = 0.16
}
-- A pulse each time a zombie player takes damage
Config.ZombiePulseFX = {
Enabled = true, MinDurMs = 1200, MaxDurMs = 2600,
CamShakeAmpMin = 0.08, CamShakeAmpMax = 0.18, ScreenFX = 'DrugsDrivingIn'
}


