Before You Begin#
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 |
|---|---|---|
| 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 |
| Optional | Styled notifications. Without it, the GTA notification feed is used. |
| Optional | Puts the player's own clothes back after the zombie model. Any other clothing script is connected in |
Ambulance script | Optional | Revives a zombie player who is killed, through the |
| Optional | The start announcement and the command suggestion. |
| 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.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.Downloading Biohazard Creator#
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:
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 importKeep the folder named
qs-biohazard. The phone app and any script that uses the exports call it by that name.
Installing the Resource#
Move the qs-biohazard folder into your server's resources directory. It can live anywhere inside it, including a category folder:
resources/
└── [qs]/
└── qs-biohazard/Once copied, open your server.cfg and make sure oxmysql starts before Biohazard Creator:
ensure oxmysql
# Optional
ensure chat
ensure qs-interface
ensure qs-appearance
ensure qs-smartphone
ensure qs-biohazard
ensure phone-biohazard # optional companion appOnly 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.
The Database#
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 |
|---|---|
| Every event preset made in the creator: its name, who made it, and its whole configuration. |
| Lifetime progression per player: XP, level, kills, infections, games, wins, losses, best kills and MVPs. |
biohazard.sql
CREATE TABLE IF NOT EXISTS `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` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `creator` (`creator`),
KEY `label` (`label`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `qs_biohazard_stats` (
`identifier` VARCHAR(80) NOT NULL,
`name` VARCHAR(120) NOT NULL DEFAULT 'Survivor',
`xp` INT(11) NOT NULL DEFAULT 0,
`level` INT(11) NOT NULL DEFAULT 1,
`kills` INT(11) NOT NULL DEFAULT 0,
`infections` INT(11) NOT NULL DEFAULT 0,
`games` INT(11) NOT NULL DEFAULT 0,
`wins` INT(11) NOT NULL DEFAULT 0,
`losses` INT(11) NOT NULL DEFAULT 0,
`best_kills` INT(11) NOT NULL DEFAULT 0,
`mvps` INT(11) NOT NULL DEFAULT 0,
`last_played` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_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.
Claiming Admin Access#
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:
add_ace group.admin command.biohazardcreator allow
add_principal identifier.license:YOUR_LICENSE group.adminAlready 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:
Config.RequireAce = false -- anyone can open the creatorConfiguring the Resource#
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 |
|---|---|
|
|
| The admin command's name, and whether it needs the ACE. |
| The kill ranking: its key, hold or toggle, refresh rate, number of rows, and whether infected players count as kills. |
| The XP for each action, the level curve, the maximum level and the rank titles. |
| The companion app: refresh rate, leaderboard size, whether presets are listed, and the start notification. |
| Random outbreaks every few hours, and the chat announcement. |
| 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:
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 ranksAuto 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.DefaultEventonly affect new events and that fallback; saved presets keep their own values.
Verifying the Installation#
After completing the installation, restart your server and read the console:
[Biohazard] Loaded 0 saved event preset(s).
[Biohazard] Auto-start in 187 minutes...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
/biohazardcreatoropens 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
Zfor 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.luaneed the resource restarted.
Recommended Map#
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.
github.comGitHub - SparksScripts/Total-Apocalypse: Post Apocalypse Map Pack for FiveMPost Apocalypse Map Pack for FiveM. Contribute to SparksScripts/Total-Apocalypse development by creating an account on GitHub.


