Project Zomboid Sandbox Settings Explained (Build 42)
Project Zomboid's sandbox settings live in a single file: Pterodactyl_SandboxVars.lua. Every gameplay knob (zombie population, loot multipliers, skill XP, day length, weather) is controlled here. This is the most important file on your server. This guide explains the file as Build 42 actually writes it, with the real key names and the real defaults.
Critical: Stop the server before editing. PZ rewrites
SandboxVars.luaon shutdown and will overwrite your changes if you edit while running.
Where the file lives
/home/container/.cache/Server/Pterodactyl_SandboxVars.lua
If you renamed your server, replace Pterodactyl with your server name.
How the Build 42 file is structured
Build 42 changed a lot of key names and moved several groups of settings into nested tables. A B42 file starts like this:
SandboxVars = {
VERSION = 6,
Zombies = 4,
Distribution = 1,
...
ZombieLore = {
Speed = 4,
...
},
ZombieConfig = {
PopulationMultiplier = 0.65,
...
},
MultiplierConfig = {
Global = 1.0,
...
},
}
Four things follow from that, and they are where most edits go wrong:
VERSION = 6marks the Build 42 format. If your file says something lower, it was written by Build 41 and the keys below will not all be present.- Zombie behaviour is not top level.
Speed,Sight,Hearingand friends only work inside theZombieLore = { ... }block. - Population respawn and multipliers live inside
ZombieConfig = { ... }. - Skill XP is a table (
MultiplierConfig), not a single multiplier value.
Pasting a key at the top level when the game expects it inside a table is a silent no-op: the server starts fine and simply ignores it.
Zombie population
The master population control is top level, and it uses six steps, not five.
| Setting | Default | Range | What it does |
|---|---|---|---|
Zombies |
4 (Normal) | 1=Insane, 2=Very High, 3=High, 4=Normal, 5=Low, 6=None | Master zombie count |
Distribution |
1 (Urban Focused) | 1=Urban Focused, 2=Uniform | Where zombies concentrate |
ZombieRespawn |
4 (None) | 1=High, 2=Normal, 3=Low, 4=None | How often new zombies are added |
ZombieMigrate |
true | true/false | Zombies may migrate into empty cells |
Note that Zombies also drives ZombieConfig.PopulationMultiplier. The two are kept in sync by the game: Insane = 2.5, Very High = 1.6, High = 1.2, Normal = 0.65, Low = 0.15, None = 0.0.
The fine-grained population knobs are inside ZombieConfig = { ... }:
| Setting | Default | Range | What it does |
|---|---|---|---|
PopulationMultiplier |
0.65 | 0.0-4.0 | Overall population, set by Zombies |
PopulationStartMultiplier |
1.0 | 0.0-4.0 | Population on day one |
PopulationPeakMultiplier |
1.5 | 0.0-4.0 | Population at the peak day |
PopulationPeakDay |
28 | 1-365 | Day the population peaks |
RespawnHours |
0.0 | 0.0-8760.0 | Hours before zombies may respawn in a cell. 0 disables respawning |
RespawnUnseenHours |
0.0 | 0.0-8760.0 | Hours a chunk must be unseen before respawn |
RespawnMultiplier |
0.0 | 0.0-1.0 | Fraction of a cell's population that respawns each cycle |
ZombiesCountBeforeDelete |
300 | 0-5000 | Tracked-zombie cap before cleanup |
Practical tuning: vanilla B42 ships with respawning off (RespawnHours = 0.0), so a cleared town stays cleared. If you want a long-lived server to refill, you need all three respawn keys: for example RespawnHours = 168.0, RespawnUnseenHours = 48.0, RespawnMultiplier = 0.1. Leaving RespawnMultiplier at 0.0 means nothing respawns no matter what the hours say.
Leave ZombiesCountBeforeDelete at 300. Raising it or setting it to 0 is a well-known cause of severe performance problems.
Zombie behaviour (inside `ZombieLore`)
These are the difficulty knobs, and they all live inside the ZombieLore = { ... } table. Several B42 defaults are "Random", which surprises people who expect Build 41 values.
| Setting | Default | Scale |
|---|---|---|
Speed |
4 (Random) | 1=Sprinters, 2=Fast Shamblers, 3=Shamblers, 4=Random |
SprinterPercentage |
0 | 0-100, only used when Speed = 4 |
Strength |
2 (Normal) | 1=Superhuman, 2=Normal, 3=Weak, 4=Random |
Toughness |
4 (Random) | 1=Tough, 2=Normal, 3=Fragile, 4=Random |
Transmission |
1 (Blood and Saliva) | 1=Blood and Saliva, 2=Saliva Only, 3=Everyone's Infected, 4=None |
Mortality |
5 (2-3 Days) | 1=Instant, 2=0-30 sec, 3=0-1 min, 4=0-12 hours, 5=2-3 days, 6=1-2 weeks, 7=Never |
Reanimate |
3 (0-1 Minutes) | 1=Instant, 2=0-30 sec, 3=0-1 min, 4=0-12 hours, 5=2-3 days, 6=1-2 weeks |
Cognition |
3 (Basic Navigation) | 1=Navigate and Use Doors, 2=Navigate, 3=Basic Navigation, 4=Random |
Memory |
2 (Normal) | 1=Long, 2=Normal, 3=Short, 4=None, 5=Random, 6=Random between Normal and None |
Sight |
5 (Random between Normal and Poor) | 1=Eagle, 2=Normal, 3=Poor, 4=Random, 5=Random between Normal and Poor |
Hearing |
5 (Random between Normal and Poor) | 1=Pinpoint, 2=Normal, 3=Poor, 4=Random, 5=Random between Normal and Poor |
CrawlUnderVehicle |
5 (Often) | 1=Never through 7=Always |
ZombiesDragDown |
true | Zombies can pull you off a rope or ledge |
ZombiesFenceLunge |
true | Zombies lunge over low fences |
There is no MemoryDuration key in Build 42, and no Smell key at all. The memory setting is Memory.
On sprinters: the default Speed = 4 is Random, and Random uses SprinterPercentage, which ships at 0. So a default B42 server has no sprinters. For an all-sprinter server set Speed = 1. For a mix, keep Speed = 4 and raise SprinterPercentage (10 to 20 is already brutal).
Loot
Build 42 replaced the old 1-5 rarity dropdowns with float multipliers, and the key names gained a New suffix. FoodLoot, WeaponLoot and OtherLoot no longer exist.
| Setting | Default | Range | Covers |
|---|---|---|---|
FoodLootNew |
0.8 | 0.0-4.0 | Food that can rot or spoil |
CannedFoodLootNew |
0.6 | 0.0-4.0 | Preserved food |
WeaponLootNew |
0.6 | 0.0-4.0 | Melee weapons |
RangedWeaponLootNew |
1.2 | 0.0-4.0 | Firearms |
AmmoLootNew |
0.6 | 0.0-4.0 | Ammunition |
MedicalLootNew |
0.6 | 0.0-4.0 | Medical items |
ToolLootNew |
0.6 | 0.0-4.0 | General tools |
MechanicsLootNew |
0.6 | 0.0-4.0 | Vehicle parts and mechanic tools |
ClothingLootNew |
0.6 | 0.0-4.0 | Clothing |
MaterialLootNew |
0.6 | 0.0-4.0 | Crafting and building materials |
FarmingLootNew |
0.6 | 0.0-4.0 | Seeds, trowels, shovels |
LiteratureLootNew |
0.6 | 0.0-4.0 | Books and magazines |
SkillBookLoot |
0.6 | 0.0-4.0 | Skill books |
KeyLootNew |
0.4 | 0.0-4.0 | Keys |
OtherLootNew |
0.8 | 0.0-4.0 | Everything not in another category |
A value of 1.0 is "as designed", so the stock file is already below baseline on most categories. Doubling a number roughly doubles how often that category shows up.
Loot respawn is separate, and there is no LootRespawn key in Build 42:
| Setting | Default | What it does |
|---|---|---|
HoursForLootRespawn |
0 | In-game hours before looted containers refill. 0 disables it |
SeenHoursPreventLootRespawn |
0 | Blocks respawn in zones visited within this many hours |
MaxItemsForLootRespawn |
5 | Containers with more items than this will not refill |
ConstructionPreventsLootRespawn |
true | Player-built structures in a zone stop respawns there |
For long-running servers: set HoursForLootRespawn = 720 (one in-game month) and SeenHoursPreventLootRespawn = 24. Otherwise players strip the map permanently and it stays stripped.
Leave RollsMultiplier at 1.0. The file itself warns against changing it, and high values hurt performance.
Time, weather and utilities
| Setting | Default | Notes |
|---|---|---|
DayLength |
4 (1 Hour, 30 Minutes) | 1=15 min, 2=30 min, 3=1 hour, 4=1 hour 30 min, 5=2 hours, up to 27=Real-time |
StartTime |
2 (9 AM) | 1=7AM, 2=9AM, 3=12PM, 4=2PM, 5=5PM, 6=9PM, 7=12AM, 8=2AM, 9=5AM |
StartMonth |
7 (July) | 1-12 |
StartDay |
9 | Day of the month |
StartYear |
1 | Year offset from 1993 |
WaterShut |
2 (0-30 Days) | When mains water stops. 9 disables the shutoff |
ElecShut |
2 (14-30 Days) | When the power grid dies. 9 disables the shutoff |
WaterShutModifier |
14 | Exact day offset used for water |
ElecShutModifier |
14 | Exact day offset used for electricity |
AlarmDecay |
2 (0-30 Days) | How long alarm batteries last after the power goes |
Temperature |
3 (Normal) | Climate warmth |
Rain |
3 (Normal) | Rainfall frequency |
There is no HoursPerDay key in Build 42. Day length is DayLength, and its scale runs all the way to 27 for real-time days.
Long-running servers: push WaterShutModifier and ElecShutModifier to 60 or higher, or set WaterShut and ElecShut to 9 to disable the shutoff entirely. Otherwise month two is spent purely hauling water.
Skill XP (inside `MultiplierConfig`)
There is no XpMultiplier key. Build 42 uses a MultiplierConfig = { ... } table with a global rate plus one entry per skill.
MultiplierConfig = {
Global = 1.0,
GlobalToggle = true,
Fitness = 1.0,
Strength = 1.0,
Woodwork = 1.0,
...
}
| Setting | Default | What it does |
|---|---|---|
Global |
1.0 | Rate at which all skills level, 0.0 to 1000.0 |
GlobalToggle |
true | When true, every skill uses Global and the per-skill values are ignored |
| Per-skill entries | 1.0 each | Fitness, Strength, Aiming, Mechanics, Cooking, Blacksmith, and the rest |
To triple XP across the board, set Global = 3.0 and leave GlobalToggle = true. To boost only firearms, set GlobalToggle = false and raise Aiming and Reloading. Setting a per-skill value while GlobalToggle is still true does nothing, which is the most common XP complaint we see.
Two related keys sit at the top level: CharacterFreePoints (default 0, extra points at character creation) and LevelForMediaXPCutoff (default 3).
Vehicles
| Setting | Default | Effect |
|---|---|---|
EnableVehicles |
true | Whether vehicles spawn at all |
CarSpawnRate |
3 (Low) | 1=None, 2=Very Low, 3=Low, 4=Normal, 5=High |
ChanceHasGas |
2 (Normal) | 1=Low, 2=Normal, 3=High |
InitialGas |
2 (Low) | 1=Very Low through 6=Full |
LockedCar |
4 (Sometimes) | 1=Never through 6=Very Often |
CarGeneralCondition |
3 (Normal) | 1=Very Low through 5=Very High |
VehicleEasyUse |
false | Removes locks and key requirements |
CarGasConsumption |
1.0 | How gas-hungry vehicles are |
World and building
| Setting | Default | Effect |
|---|---|---|
ConstructionBonusPoints |
3 (Normal) | Extra hit points on player-built structures |
AllClothesUnlocked |
false | All clothing available at character creation |
MaxFogIntensity |
1 (Normal) | 1=Normal, 2=Moderate, 3=Low, 4=None |
MaxRainFxIntensity |
1 (Normal) | 1=Normal, 2=Moderate, 3=Low |
EnableSnowOnGround |
true | Snow accumulates on the ground |
Basement.SpawnFrequency |
4 (Sometimes) | Build 42 basements, inside the Basement = { ... } table |
Map.AllowWorldMap |
true | Inside the Map = { ... } table, with AllowMiniMap (false by default) |
Note that MaxFogIntensity and MaxRainFxIntensity are integer steps in Build 42, not the 0.0-1.0 floats they used to be. Writing MaxFogIntensity = 0.0 is not "no fog", it is an invalid step.
Editing the file safely
- Stop the server from your panel. This is non-negotiable
- Open
/home/container/.cache/Server/Pterodactyl_SandboxVars.luain the file manager or over SFTP - Find the setting with Ctrl+F, and check whether it sits at the top level or inside
ZombieLore,ZombieConfig,MultiplierConfig,MaporBasement - Change only the value after
=. Leave the key name, the comma and the surrounding braces alone - Save the file
- Start the server
Values must be valid Lua: Speed = 1, not Speed = "Sprinters". Booleans are bare true / false, never quoted. Multiplier keys take decimals (FoodLootNew = 1.2), step keys take whole numbers (CarSpawnRate = 4).
If the server refuses to boot after an edit, you almost certainly dropped a comma or a closing brace. The console will name the line.
Which changes apply to an existing world
Sandbox settings are read at world creation, so a lot of them only affect terrain that has not been generated yet. Settings that do take effect on an existing save after a restart:
- Everything in
ZombieLore(Speed,Strength,Cognition,Sight,Hearing) - The respawn keys in
ZombieConfig(RespawnHours,RespawnUnseenHours,RespawnMultiplier) - Loot respawn (
HoursForLootRespawn,SeenHoursPreventLootRespawn) MultiplierConfigXP rates- Utility shutoff timings, as long as the shutoff has not already happened
Settings that do not retroactively change an existing world:
StartMonth,StartDay,StartTime,StartYear- The
*LootNewmultipliers, for containers that already generated CarSpawnRateand vehicle placement in explored chunksBasement.SpawnFrequency, since basements are placed with the chunk
Sandbox presets
Project Zomboid ships with built-in presets you can apply from the in-game Custom Sandbox menu before generating a world: Apocalypse (the default), Survivor, Survival, Builder, Initial Infection, Six Months Later. On a dedicated server there is no preset picker, so the practical route is to configure the preset in a singleplayer game, then copy the values out of that save's SandboxVars.lua into your server file. Keep the nesting intact when you copy.
FAQ
My changes keep getting reverted. You edited while the server was running. PZ saved its in-memory state on shutdown and overwrote your file. Always stop the server first.
I changed a zombie setting and nothing happened.
You almost certainly put it at the top level. Speed, Sight, Hearing, Memory, Toughness and the rest only work inside the ZombieLore = { ... } table. The same trap catches RespawnHours, which belongs inside ZombieConfig.
Why do my zombies respawn even though I set RespawnHours?
Or the reverse: nothing respawns. All three keys matter. RespawnHours sets the cycle, RespawnUnseenHours gates it on visibility, and RespawnMultiplier decides how many come back. B42 ships all three effectively off.
Where is XpMultiplier?
Gone. Build 42 uses MultiplierConfig.Global, with GlobalToggle = true to make it apply to every skill.
Can I change settings live with /changeoption? Only a small subset (PVP, max players, voice settings). Sandbox values cannot be changed live, they need a restart.
Where can I find the full vanilla defaults?
Boot a fresh server. The panel generates SandboxVars.lua with every default on first start, and the file carries an inline comment above each key listing its scale and default. That file is the reference, not an old Build 41 guide.
Will a higher zombie population hurt server performance?
Yes, significantly. Doubling PopulationPeakMultiplier adds roughly 30% to RAM usage and CPU load. Plan with our RAM calculator.
Do mods add their own sandbox settings?
Some do. Mods that register sandbox options add their fields automatically when loaded, and they appear in SandboxVars.lua after the next server start.
