Configuration
All gameplay settings are in config.lua. Client integration stubs are in the editable/ folder.
General
Debug
- Type:
boolean - Default:
false - Description: Enables the client debug overlay (zombie HP, AI task, zone counts). Set to
falsebefore going live.
DebugPrints
- Type:
boolean - Default:
false - Description: Enables verbose spawn and player-tracking logs via
lib.print.debug(server and client). Toggle on only when troubleshooting spawns.
DebugCell
- Type:
boolean - Default:
false - Description: Shows an on-screen overlay with your current grid cell ID, spawn zone, GTA zone, density limits, and ped list. Use this to find cell IDs when configuring
CellLocationsorCellZoneOverrides.
Spawn
SpawnTickRate
- Type:
number(milliseconds) - Default:
6500 - Description: How often the server checks and spawns zombies/animals per zone.
ClientSpawnPerTick
- Type:
number - Default:
2 - Description: Maximum entities requested from a client per spawn tick.
NewDensity
- Type:
boolean - Default:
true - Description: Uses the grid-based density system. Spawn positions are picked in the lowest-density cell near the player.
SpawnRadiusMin / SpawnRadiusMax
- Type:
number(metres) - Default:
50.0/100.0 - Description: Ring around the player where the client picks spawn positions. Zombies appear off-screen between these distances when possible.
DayMultiplier / NightMultiplier
- Type:
number - Default:
1.0/1.5 - Description: Zombie density multiplier during day (06:00–20:00) and night (20:00–06:00).
AnimalDayMultiplier / AnimalNightMultiplier
- Type:
number - Default:
1.0/0.5 - Description: Animal density multiplier for day and night.
zombieDespawnTimeout / animalDespawnTimeout
- Type:
number(seconds) - Default:
60 - Description: Time before an inactive entity is removed when no players are subscribed.
deadBodyTimeout
- Type:
number(seconds) - Default:
180 - Description: How long dead zombie bodies persist.
AI Behaviour
zombieTargetTimeout
- Type:
number(seconds) - Default:
60 - Description: How long a zombie keeps chasing a target before giving up.
canGetPedOutOfVehicle
- Type:
boolean - Default:
true - Description: Allows zombies to attempt pulling the player out of a vehicle.
chaseDistance
- Type:
number - Default:
75.0 - Description: Maximum chase distance before a zombie stops pursuing.
meleeAttackRange / animalMeleeAttackRange / vehicleMeleeAttackRange
- Type:
number(metres) - Default:
2.5/3.0/6.0 - Description: Melee attack range for zombies against players on foot, animals, and players in vehicles.
overwriteVisible
- Type:
table - Description: Detection range (metres) by player movement state. Keys:
default,stealth,walk,run,sprint,on_vehicle.
overwriteNoises
- Type:
table - Description: Footstep/vehicle noise radius by movement state. Higher values attract zombies from farther away.
ignoreExplosionNoise
- Type:
number[] - Description: Explosion type IDs that should not create noise events.
defaultWeaponNoiseRadius / weaponNoiseRadius / silencedWeaponNoiseMultiplier / weaponNoiseDuration
- Description: Gunshot noise settings.
weaponNoiseRadiusmaps weapon names to custom radii. Silenced weapons usedefaultWeaponNoiseRadius * silencedWeaponNoiseMultiplier.
Safe Zones
SafeZoneBlips
- Type:
table - Description: Map blip settings for safe zones (
label,color,alpha,scale,sprite,shortRange).
SafeZones
- Type:
table[] - Description: Safe zone definitions. Each entry:
| Field | Type | Description |
|---|---|---|
coords | vector3 | Centre of the safe zone |
radius | number | Safe zone radius |
label | string | Display name |
blip | boolean | Show on map |
stashCoords | vector3 | Personal stash interaction point |
clothingStoreCoords | vector3 | Clothing rack interaction point |
barber | table | Barber NPC (model, coords as vector4) |
SafeZoneStash
- Type:
table - Description: Stash settings:
maxSlots,maxWeight,label,interactionDistance.
SafeZoneClothingStore
- Type:
table - Description:
interactionDistancefor clothing rack targets.
No-Spawn & Red Zones
NoSpawnZones
- Type:
table[] - Description: Areas where zombies and animals never spawn. Each entry has
coordsandradius.
RedZoneBlips
- Type:
table - Description: Map blip settings for red zones.
RedZones
- Type:
table - Default:
{} - Description: High-difficulty areas. Each entry can include:
| Field | Type | Description |
|---|---|---|
coords | vector3 | Centre position |
radius | number | Zone radius |
label | string | Blip label override |
zombieMultiplier | number | Spawn density multiplier |
healthMultiplier | number | Zombie health multiplier |
damageMultiplier | number | Zombie damage multiplier |
carDamageMultiplier | number | Vehicle damage multiplier |
zombieTypes | table | Weighted zombie type pool (same format as Config.ZombieTypes entries) |
Nests
NestBlips
- Type:
table - Description: Map blip settings for active nests (
enabled,label,color,scale,sprite,shortRange).
NestSpawnTickRate / NestSpawnPerTick / NestSpawnCount / ScreamerAlertRadius
- Description: Nest regeneration interval, spawn rate, default zombie limit per nest, and screamer alert radius.
NestZones
- Type:
table[] - Description: Predefined nest spawn areas on the map. Each entry:
| Field | Type | Description |
|---|---|---|
coords | vector3 | Zone centre |
radius | number | Area where nests can appear |
barrelCount | number | Barrels per nest |
nestRadius | number | Nest influence radius |
barrelRadius | number | Barrel spread radius |
nestZombies / nestZombieMultiplier | number | Zombie count and spawn multiplier |
nestHealthMultiplier | number | Health multiplier for nest zombies |
maxNests | number | Max active nests in this zone |
nestRegenerationTime | number | Seconds before a destroyed nest regenerates |
nestModels | hash[] | Prop models for the nest object |
barrelHealth / nestHealth | number | Destructible object health |
nestWeapons | table | Weapon hash → damage multiplier for destroying nests |
NestWeapons
- Type:
table - Description: Global weapon damage multipliers used when damaging nest objects and barrels.
NestZombieTypes
- Type:
table - Description: Weighted zombie type pool used when spawning zombies from nests.
Zombie Types
ZombieTypes
- Type:
table - Description: All zombie archetypes. Each key is a type ID used in spawns and commands.
| Field | Type | Description |
|---|---|---|
label | string | Display name |
weight | number | Spawn weight for random selection (0 = never spawned randomly) |
health | number | Base health |
damage | number | Melee damage to players |
carDamage | number | Engine damage when attacking vehicles |
movementSpeed | number | Movement speed multiplier |
canBeStomped | boolean | Can be killed by running over |
scream | boolean | Screamer behaviour |
screamAlertRadius / screamCooldown | number | Screamer settings |
customModels | hash[] | Ped model overrides |
proofs | boolean[] | Entity proof flags |
particle / auraParticle | table | Looping particle effects (lib, name, scale) |
projectile | table | Ranged attack (speed, distance, cooldown, damage, area, fire/toxic/electrocute) |
deathExplosion | table | Explosion on death (damage, radius) |
bleedOnHit | boolean | Applies bleed damage over time |
behaviorType | string | Set to "animal" for animal AI |
hostile | boolean | Whether animal-type peds attack players |
Spawn grid & location settings
The map is divided into a 34×50 grid (1700 cells). Each cell has a numeric ID (e.g. 1316). The server assigns every cell a spawn zone key (e.g. CHU, LEGSQU, or DEFAULT) based on built-in chunk data. Spawn density and ped pools are resolved from that zone, with optional overrides per cell or circular area.
How spawn resolution works
Player position
→ Grid cell ID (e.g. 1316)
→ Spawn zone (CellZoneOverrides → chunk map → DefaultZone)
→ Base map location (mapLocations[zone] → DefaultMapLocation)
→ Cell override (CellLocations[cellId], merged on top)
→ Spawn area override (SpawnAreas entry at coords, merged on top)| Concept | What it is |
|---|---|
| Cell ID | Grid square from player coordinates. Enable DebugCell to see yours in-game. |
| Spawn zone | Server grouping key used for spawn caps and mapLocations lookup. Not the same as the GTA zone name from GetNameOfZone. |
| GTA zone | Native zone abbreviation (LEGSQU, CHU, etc.) shown in debug only. |
| Map location | Resolved settings: humansList, animalsList, maxZombies, maxAnimals. |
Spawn positions are picked by the client in a ring SpawnRadiusMin–SpawnRadiusMax around the player. The server controls how many entities exist per spawn zone and which ped list to use when creating them.
Finding your cell ID
Set Config.DebugCell = true, stand where you want custom settings, and note the Cell value on screen. Use that number in CellLocations or CellZoneOverrides.
DefaultZone
- Type:
string - Default:
'DEFAULT' - Description: Spawn zone key assigned to grid cells with no chunk mapping. Cells using this key fall back to
DefaultMapLocationunless overridden.
DefaultMapLocation
- Type:
table - Description: Fallback spawn settings when the spawn zone has no entry in
mapLocations(includingDEFAULT).
| Field | Type | Description |
|---|---|---|
humansList | string | Key from pedLists for zombie models |
animalsList | string | Key from pedLists for wildlife models |
maxZombies | number | Base max zombies for players in this spawn zone |
maxAnimals | number | Base max animals for players in this spawn zone |
Config.DefaultMapLocation = {
humansList = 'city',
animalsList = 'animals',
maxZombies = 26,
maxAnimals = 8,
}mapLocations
- Type:
table - Description: Per spawn zone settings. Keys are GTA zone abbreviations (
CHU,SANDY,LEGSQU,ARMYB, etc.). Used when a cell’s spawn zone matches that key.
| Field | Type | Description |
|---|---|---|
humansList | string | Key from pedLists for zombie models |
animalsList | string | Key from pedLists for wildlife models |
maxZombies | number | Base max zombies in this spawn zone |
maxAnimals | number | Base max animals in this spawn zone |
Config.mapLocations['LEGSQU'] = {
humansList = 'city',
animalsList = 'animals',
maxZombies = 40,
maxAnimals = 4,
}CellZoneOverrides
- Type:
table([cellId] = zoneKey) - Description: Force a grid cell to use a specific spawn zone key and its
mapLocationsentry. Useful when chunk mapping leaves a downtown cell onDEFAULTbut you wantLEGSQUsettings.
Config.CellZoneOverrides = {
[1316] = 'LEGSQU',
}CellLocations
- Type:
table([cellId] = mapLocationFields) - Description: Per-cell overrides merged on top of the zone’s map location. Only include fields you want to change.
Config.CellLocations = {
[1316] = {
humansList = 'military',
maxZombies = 50,
maxAnimals = 2,
},
}SpawnAreas
- Type:
table[] - Description: Circular areas with custom spawn settings. Checked by player/spawn coordinates. If multiple areas overlap, the first matching entry in the list wins.
| Field | Type | Required | Description |
|---|---|---|---|
coords | vector3 | Yes | Centre of the area |
radius | number | Yes | Radius in metres |
label | string | No | Debug label (not used by spawn logic) |
humansList | string | No | Override ped list for zombies |
animalsList | string | No | Override ped list for animals |
maxZombies | number | No | Override max zombies |
maxAnimals | number | No | Override max animals |
Config.SpawnAreas = {
{
coords = vector3(195.0, -1012.0, 29.0),
radius = 150.0,
label = 'Legion Square',
humansList = 'military',
maxZombies = 50,
maxAnimals = 2,
},
}Runtime density boosts
For temporary events, use the AddAreaMultiplier export instead of editing config. See Exports.
Ped Lists & Map Density
pedLists
- Type:
table - Description: Named pools of GTA ped model strings. Referenced by map location settings via
humansListandanimalsList.
AnimalModels
- Type:
table - Description: Maps animal model names to GTA relationship group hashes.
Damage Config
DamageConfig
- Type:
table - Description: Weapon damage multipliers split into three categories:
| Key | Description |
|---|---|
Players | Damage dealt to players by each weapon |
Zombies | Damage dealt to zombies by each weapon |
Animals | Damage dealt to animals by each weapon |
Weapon keys are weapon hashes (e.g. `WEAPON_BAT`). Values are multipliers applied on top of base damage.
Editable integration
The editable/ folder contains client-side hooks you must implement for your server setup. These files are loaded before the main client scripts.
editable/cl_ui.lua
| Function | Called when |
|---|---|
OpenClothingMenu() | Player uses the clothing rack in a safe zone |
OpenTattooMenu() | Player uses the tattoo interaction |
OpenWardrobeMenu() | Player uses the wardrobe interaction |
OpenBarberMenu() | Player interacts with the barber NPC |
editable/cl_inventory.lua
| Function | Called when | Default |
|---|---|---|
DisarmPlayer() | Player enters a safe zone | bridge.inv.disarm() |
editable/cl_perks.lua
| Function | Returns | Used for |
|---|---|---|
GetElementalResistance() | number (0.0–1.0) | Reduces elemental zombie damage |
GetGritFortitude() | number (0.0–1.0) | Reduces melee zombie damage |
GetHeadshotCritChance() | number | Headshot critical hit chance |
GetCritChance() | number | General critical hit chance |
GetCritMultiplier() | number | Critical hit damage multiplier |
GetZombieStagger() | number | Chance to stagger zombies on hit |
editable/cl_hud.lua
| Function | Called when |
|---|---|
OnZombieHitPlayer() | Player is hit by a zombie melee attack |
OnRegisterCompassWaypoint(id, coords, icon, color) | Optional — implement to hook your compass/HUD |
OnRemoveCompassWaypoint(id) | Optional — implement to hook your compass/HUD |
DisarmPlayer default
editable/cl_inventory.lua ships with bridge.inv.disarm(). Override this file if your server needs custom disarm logic.
Admin Commands
| Command | Permission | Description |
|---|---|---|
/zombies_toggle | admin | Toggle zombie spawning on/off |
/zombies_spawn [type] [health] | admin | Spawn one zombie near you |
/zombies_bomb [count] | admin | Spawn multiple zombies (default: 10) |
/zombies_debug | admin | Toggle debug overlay |
Server Convars
See Installation — Server convars for zombieMultiplier, zombieSpawnMultiplier, animalMultiplier, animalSpawnMultiplier, and allowOnlyCharacterCreation.