Installation — Biohazard Creator FiveM Zombie Script | Quasar Store | Quasar Store
Documentation
Installation
Install Biohazard Creator (qs-biohazard) on your FiveM server: requirements, server.cfg load order, the SQL tables, ACE admin access for /biohazardcreator and your first zombie outbreak.
Before installing Biohazard Creator, make sure your server meets the minimum requirements. Only one resource is mandatory; everything else is optional and only adds polish.
Requirement
Status
Notes
oxmysql
Required
Stores the event presets and every player's progression.
Framework
Optional
The script is standalone. ESX, QBCore or Qbox are only used for survivor rewards and character names, through server/custom.lua.
qs-interface
Optional
Styled notifications. Without it, the GTA notification feed is used.
qs-appearance
Optional
Puts the player's own clothes back after the zombie model. Any other clothing script is connected in client/custom.lua.
Ambulance script
Optional
Revives a zombie player who is killed, through the ambulance:revivePlayer event.
chat
Optional
The start announcement and the command suggestion.
qs-smartphone + phone-biohazard
Optional
The companion app: the live outbreak, the player's profile and the leaderboard.
Every optional piece degrades quietly. If a resource is missing, that feature falls back to plain GTA behaviour — nothing errors, and the outbreak still runs.
After purchasing Biohazard Creator, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Biohazard. With a different account, the asset does not appear.
After extracting the download, you should have the following:
lua
qs-biohazard/
├── config.lua -- every global setting
├── client/custom.lua -- notifications, clothing, death state (open)
├── server/custom.lua -- identifiers, names, rewards (open)
├── shared/ -- shared helpers
├── locales/ -- en.json · es.json
├── client/ · server/ -- the runtime
└── web/ -- the interface, its images and sounds
[sql]/
└── biohazard.sql -- the two tables to import
Keep the folder named qs-biohazard. The phone app and any script that uses the exports call it by that name.
Only oxmysql has to come first. Every optional resource is looked up live, each time it is used, so its position in the file does not matter, and one started later is picked up without restarting Biohazard Creator.
Biohazard Creator ships its tables as an SQL file. Import [sql]/biohazard.sql into your server's database before the first start, with HeidiSQL or any MySQL / MariaDB client. It creates two tables:
Table
Holds
qs_biohazard_events
Every event preset made in the creator: its name, who made it, and its whole configuration.
qs_biohazard_stats
Lifetime progression per player: XP, level, kills, infections, games, wins, losses, best kills and MVPs.
biohazard.sql
sql
CREATE TABLE IF NOTEXISTS `qs_biohazard_events` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`creator` VARCHAR(80) NOT NULL,
`label` VARCHAR(255) NOT NULL,
`data` LONGTEXT NOT NULL,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `creator` (`creator`),
KEY `label` (`label`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOTEXISTS `qs_biohazard_stats` (
`identifier` VARCHAR(80) NOT NULL,
`name` VARCHAR(120) NOT NULLDEFAULT'Survivor',
`xp` INT(11) NOT NULLDEFAULT0,
`level` INT(11) NOT NULLDEFAULT1,
`kills` INT(11) NOT NULLDEFAULT0,
`infections` INT(11) NOT NULLDEFAULT0,
`games` INT(11) NOT NULLDEFAULT0,
`wins` INT(11) NOT NULLDEFAULT0,
`losses` INT(11) NOT NULLDEFAULT0,
`best_kills` INT(11) NOT NULLDEFAULT0,
`mvps` INT(11) NOT NULLDEFAULT0,
`last_played` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
`created_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMP,
`updated_at` TIMESTAMPNOT NULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
PRIMARY KEY (`identifier`),
KEY `level` (`level`),
KEY `xp` (`xp`),
KEY `kills` (`kills`),
KEY `wins` (`wins`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
Both statements use CREATE TABLE IF NOT EXISTS, so importing the file again on an existing install is safe: it never wipes presets or progression.
The creator designs and launches outbreaks for the whole server, so it is locked behind an ACE permission named after its command: command.biohazardcreator. Players without it who type /biohazardcreator are told they are not allowed to use the creator.
The usual route. Add these lines to server.cfg and restart the server:
Already have an admin group? The first line is enough. Renamed the command with Config.CreatorCommand? The permission follows it: command.<your command>.
For a test server only. In config.lua:
lua
Config.RequireAce = false-- anyone can open the creator
Almost everything about an outbreak — its area, length, hour, weather, horde, zombies, infection and rewards — is set per event in the creator and stored in the database. config.lua holds what every event shares, and the template a new event starts from:
Block
What it holds
Config.Language
en or es, or any locales/<key>.json you add.
Config.CreatorCommand · Config.RequireAce
The admin command's name, and whether it needs the ACE.
Config.Scoreboard
The kill ranking: its key, hold or toggle, refresh rate, number of rows, and whether infected players count as kills.
Config.Levels
The XP for each action, the level curve, the maximum level and the rank titles.
Config.Phone
The companion app: refresh rate, leaderboard size, whether presets are listed, and the start notification.
Config.AutoStart
Random outbreaks every few hours, and the chat announcement.
Config.DefaultEvent
The values a new event opens with in the creator, and the outbreak Auto Start runs when no preset exists.
Advanced runtime
AI timing, infection internals, the on-screen timer, cleanup, the intro and ending overlays and the screen effects. See Usage.
The values worth reviewing first:
lua
Config.Language = 'en'-- en · es
Config.CreatorCommand = 'biohazardcreator'-- the admin command
Config.RequireAce = true-- creator locked behind the ACE
Config.AutoStart = {
Enabled = true, -- random outbreaks on their own
MinHours = 2, -- shortest gap between two
MaxHours = 5, -- longest gap between two
AnnounceInChat = true
}
Config.Scoreboard.Key = 'Z'-- the kill ranking
Config.Levels.Enabled = true-- XP, levels and ranks
Auto Start ships on. On a fresh install with no presets, it launches the default template — a whole-map outbreak — two to five hours after boot. Turn it off until your events are designed if you would rather not be surprised. Changes to Config.DefaultEvent only affect new events and that fallback; saved presets keep their own values.
The first line confirms the database is reachable and the tables exist. The second appears ten seconds after boot when Auto Start is on, with a random delay inside your range.
Then join your server and run a first outbreak:
Open the creator
/biohazardcreator opens on an empty list — No events yet. Press New event.
Design a short outbreak
Name it, set the duration to 5 minutes, leave the area on Whole map and press Create. It appears in the list on the left.
Start it
Select it and press Start. The creator closes, night falls, the intro plays and zombies spawn around you. Let them hit you three times to feel the infection, and press Z for the scoreboard.
Stop it
Reopen the creator and press Stop event. The zombies vanish and the weather and clock return. From there, Usage covers drawing a zone and tuning every setting.
Nothing needs a restart from here on. Presets are created, edited and launched live; only edits to config.lua need the resource restarted.
For the most immersive outbreak, add an apocalypse map to your server. Total Apocalypse turns Los Santos into a ruined, devastated city, which fits a zombie night perfectly and makes every encounter feel like a real outbreak.