____ __ __ __ ____ _ _ __ __ __ _
( _ \( ) / \ / \( \( \/ ) / \ / \ ( ( \
) _ (/ (_/\( O )( O )) D (/ \/ \( O )( O )/ /
(____/\____/ \__/ \__/(____/\_)(_/ \__/ \__/ \_)__)
Important
Using Docker Desktop with WSL2 on Windows will result in a very slow download!
Warning
This BloodMoonPZ fork is discontinued and no longer actively maintained. The repository is still public and still usable as-is for anyone who wants to run it, inspect it, or fork it, but there is no active support channel, no community hub, and no ongoing roadmap behind it anymore.
This fork extends indifferentbroccoli/projectzomboid-server-docker with the following:
| Script | Purpose |
|---|---|
| pzstart | Saves the world via RCON, runs docker compose down, rebuilds the image with --no-cache, starts the server and follows logs. Use for a full clean restart. Shutdown is graceful: the container trap runs save + quit (up to 30s), so the world is not cut mid-save. |
| saveworld | Sends the RCON save command to the running container. Use to save the world without restarting. |
| pz-console | Stream the game admin console (Docker logs). Use ./pz-console --interactive to type RCON commands (e.g. servermsg, players, save) without running docker exec manually. "[Server] Server is too busy" = overloaded. |
| pz-cmd | Send one RCON command: ./pz-cmd servermsg "Hello" or ./pz-cmd players. No need to type docker exec .... |
| scripts/healthcheck-restart-if-low-mem.sh | Healthcheck for host cron: if the container is down or RAM usage is below a threshold (default 20 GB), runs ./pzstart --no-follow. Set cron every 5 min: */5 * * * * /path/to/projectzomboid-server-docker/scripts/healthcheck-restart-if-low-mem.sh. Override with PZ_RAM_THRESHOLD_GB, PZ_CONTAINER, PZ_DIR. |
| wipe | Stops the server (graceful), backs up the current world to server-data/backups/<SERVER_NAME>-pre-wipe-<timestamp>, removes the world folder so the next start is a fresh world. Run ./pzstart after a wipe to rebuild and start. Uses SERVER_NAME from .env. |
| Script | Purpose |
|---|---|
| apply-startup-admins.sh | When STARTUP_ADMIN_CREDENTIALS or STARTUP_ADMIN_USERNAMES is set, waits for RCON and creates users (with password) and/or grants admin to existing usernames. |
| patch-sandbox-loot.sh | If SANDBOX_LOOT_MULTIPLIER is set in .env, patches all *LootNew values in Server/<SERVER_NAME>_SandboxVars.lua. Leave empty to keep in-game admin loot changes. |
| patch-vehicle-nospawn.sh | Sets spawnChance = 0 for vehicles 92amgeneralM998 and TrailerM101A3cargo (workshop 2642541073) so they do not spawn in the world; they remain available for admin spawn. |
| fix-mod-case-symlinks.sh | Creates symlinks so Linux finds mods whose folder names differ from the Mod ID (e.g. DayZ Firearms, VFE, Porsche 918, Lynx Pack → LynxPack). Required for mods with spaces or different casing. |
| scheduled-restart.sh | Invoked by cron when RESTART_SCHEDULE_CRON is set; broadcasts warnings, saves the world, then quits so the container restarts. |
- Graceful shutdown: On
docker compose down, the container handles SIGTERM and runs save + quit (no manual save with a short delay that could cut the save). - Sandbox persistence:
Server/<SERVER_NAME>_SandboxVars.lualives in theserver-datavolume. In-game admin sandbox changes (zombies, day length, vehicles, etc.) persist across restarts. Only the loot multipliers (*LootNew) are overwritten at startup whenSANDBOX_LOOT_MULTIPLIERis set in.env; leave it empty if you want in-game loot edits to persist.
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 4 cores | 4+ cores |
| RAM | 4GB | Recommend over 8GB for stable operation |
| Storage | 5GB | 10GB |
Note
Build 42 Support: To use Project Zomboid's latest Build 42 Unstable branch,
set SERVER_BRANCH=unstable in your .env file. Leave empty or unset for the
stable branch.
Important
.env settings will override the current settings in the settings.ini If you do not want that to happen, set GENERATE_SETTINGS=false
Copy the .env.example file to a new file called .env file. Then use either docker compose or docker run
Important
Please make sure to change the following in the .env: PASSWORD/RCON_PASSWORD/ADMIN_USERNAME/ADMIN_PASSWORD
In Project Zomboid every player (including admins) must have the same Workshop mods installed in Steam to see mod items, vehicles, and content. The server does not send mod files; clients download them from the Steam Workshop.
- Admins not seeing mod items: Have them subscribe to the same Workshop IDs as the server (see
WORKSHOP_ITEMSin.env) and ensure Steam has finished downloading the mods before joining. - Optional: Set
DO_LUA_CHECKSUM=truein.envso only clients with matching mod files can join (they will be kicked if mods are missing or outdated). - Share the Workshop IDs with your team (semicolon-separated list in
.env) so they can subscribe:
https://steamcommunity.com/sharedfiles/filedetails/?id=WORKSHOP_ID
Starting the server with Docker Compose:
services:
projectzomboid:
image: indifferentbroccoli/projectzomboid-server-docker
restart: unless-stopped
container_name: projectzomboid
stop_grace_period: 30s
ports:
- 16261:16261/udp
- 16262:16262/udp
- 27015:27015/tcp
environment:
GENERATE_SETTINGS: true
env_file:
- .env
volumes:
- ./server-files:/project-zomboid
- ./server-data:/project-zomboid-configThen run:
docker compose up -ddocker run -d \
--restart unless-stopped \
--name projectzomboid \
--stop-timeout 30 \
-p 16261:16261/udp \
-p 16262:16262/udp \
-p 27015:27015/tcp \
-e GENERATE_SETTINGS=true \
--env-file .env \
-v ./server-files:/project-zomboid \
-v ./server-data:/project-zomboid-config
indifferentbroccoli/projectzomboid-server-dockerFrom the repo root (with the container built and .env configured):
| Command | Description |
|---|---|
./saveworld |
Save the world via RCON (container must be running). |
./pz-console |
Stream admin console (Docker logs). ./pz-console --interactive to type RCON commands. |
./pz-cmd "servermsg Hello" |
Send one RCON command without typing docker exec. |
./wipe |
Stop server, backup world to server-data/backups/, remove world. Then run ./pzstart to start fresh. |
./pzstart |
Save, down, rebuild image (no cache), up, then follow logs. Use for a full restart. |
Set PZ_DIR if the repo is not in $HOME/projectzomboid-server-docker.
You can use the following values to change the settings of the server on boot. It is highly recommended you set the following environment values before starting the server:
- PASSWORD
- RCON_PASSWORD
- ADMIN_USERNAME
- ADMIN_PASSWORD
| Source | Target | What it does |
|---|---|---|
.env (full table below) |
Server/<SERVER_NAME>.ini |
Generated on start when GENERATE_SETTINGS=true. Network, PVP, safehouse, mods, loot respawn, etc. |
.env → SANDBOX_LOOT_MULTIPLIER |
Server/<SERVER_NAME>_SandboxVars.lua |
Patched on start: all loot rarity values (*LootNew) are set to this number. Empty = no patch. |
| Game / first run | Server/<SERVER_NAME>_SandboxVars.lua |
Full sandbox (zombies, day length, weather, vehicles, etc.). In-game admin sandbox changes persist across restarts; only *LootNew is overwritten when SANDBOX_LOOT_MULTIPLIER is set. |
| Variable | Default | Info |
|---|---|---|
| PVP | true | Players can hurt and kill other players |
| PAUSE_EMPTY | true | Game time stops when there are no players online |
| GLOBAL_CHAT | true | Toggles global chat on or off. |
| CHAT_STREAMS | s,r,a,w,y,sh,f,all | Chat streams |
| OPEN | true | Clients may join without already having an account in the whitelist. If set to false, administrators must manually create username/password combos. |
| SERVER_WELCOME_MESSAGE | Welcome to your Project Zomboid Docker server | The first welcome message visible in the chat panel. |
| AUTO_CREATE_USER_IN_WHITE_LIST | false | Add unknown usernames to the whitelist when players join |
| DISPLAY_USER_NAME | true | Display usernames above player's heads in-game. |
| SHOW_FIRST_AND_LAST_NAME | false | Display first & last name above player's heads. |
| SPAWN_POINT | 0,0,0 | Force every new player to spawn at these set x,y,z world coordinates. (Ignored when 0,0,0) |
| SAFETY_SYSTEM | true | Players can enter and leave PVP on an individual basis. |
| SHOW_SAFETY | true | Display a skull icon over the head of players who have entered PVP mode |
| SAFETY_TOGGLE_TIMER | 2 | The time it takes for a player to enter and leave PVP mode\nMinimum=0 Maximum=1000 Default=2 |
| SAFETY_COOLDOWN_TIMER | 3 | The delay before a player can enter or leave PVP mode again, having recently done so\nMinimum=0 Maximum=1000 Default=3 |
| SPAWN_ITEMS | Item types new players spawn with.\nSeparate multiple item types with commas.\nExample: Base.Axe,Base.Bag_BigHikingBag | |
| DEFAULT_PORT | 16261 | Default starting port for player data. |
| UDP_PORT | 16262 | Minimum=0 Maximum=65535 Default=16262 |
| RESET_ID | 563979383 | Reset ID determines if the server has undergone a soft-reset. |
| MODS | Same syntax as server.ini: \Mod1;\Mod2;\Mod3 (backslash before each, semicolon-separated). Found in \Steam\steamapps\workshop\modID\mods\modName\info.txt | |
| MAP | Enter the foldername of the mod found in \Steam\steamapps\workshop\modID\mods\modName\media\maps\ | |
| DO_LUA_CHECKSUM | true | Kick clients whose game files don't match the server's. |
| DENY_LOGIN_ON_OVERLOADED_SERVER | false | Deny login on overloaded server |
| PUBLIC | true | Shows the server on the in-game browser. (Note: Steam-enabled servers are always visible in the Steam server browser) |
| PUBLIC_NAME | Project Zomboid Docker Server | Name of the server displayed in the in-game browser and, if applicable, the Steam browser |
| SERVER_NAME | pzserver | Name of the server/map |
| PUBLIC_DESCRIPTION | Welcome to your Project Zomboid Docker server | Description displayed in the in-game public server browser. Typing \n will create a new line in your description |
| MAX_PLAYERS | 32 | Maximum number of players that can be on the server at one time. This excludes admins. |
| PING_LIMIT | 400 | Ping limit, in milliseconds, before a player is kicked from the server. |
| HOURS_FOR_LOOT_RESPAWN | 0 | After X hours, all containers in the world will respawn loot. |
| MAX_ITEMS_FOR_LOOT_RESPAWN | 4 | Containers with a number of items greater, or equal to, this setting will not respawn |
| SANDBOX_LOOT_MULTIPLIER | (empty = skip) | Applied at startup to all *LootNew values in Server/<name>_SandboxVars.lua. 0=none, 0.2=minimal, 0.6=normal, 4=very high. Leave empty to keep file as-is. |
| CONSTRUCTION_PREVENTS_LOOT_RESPAWN | false | Items will not respawn in buildings that players have barricaded or built in |
| DROP_OFF_WHITE_LIST_AFTER_DEATH | false | Remove player accounts from the whitelist after death. |
| NO_FIRE | false | All forms of fire are disabled - except for campfires |
| ANNOUNCE_DEATH | false | If checked, every time a player dies a global message will be displayed in the chat |
| MINUTES_PER_PAGE | 1.0 | The number of in-game minutes it takes to read one page of a book |
| SAVE_WORLD_EVERY_MINUTES | 0 | Loaded parts of the map are saved after this set number of real-world minutes have passed. |
| PLAYER_SAFEHOUSE | false | Both admins and players can claim safehouses |
| ADMIN_SAFEHOUSE | false | Only admins can claim safehouses |
| SAFEHOUSE_ALLOW_TRESPASS | true | Allow non-members to enter a safehouse without being inviteds |
| SAFEHOUSE_ALLOW_FIRE | true | Allow fire to damage safehouses |
| SAFEHOUSE_ALLOW_LOOT | true | Allow non-members to take items from safehouses |
| SAFEHOUSE_ALLOW_RESPAWN | false | Players will respawn in a safehouse that they were a member of before they died |
| SAFEHOUSE_DAY_SURVIVED_TO_CLAIM | 0 | Players must have survived this number of in-game days before they are allowed to claim a safehouse |
| SAFEHOUSE_REMOVAL_TIME | 144 | Players are automatically removed from a safehouse they have not visited for this many real-world hours |
| SAFEHOUSE_ALLOW_NON_RESIDENTIAL | false | Governs whether players can claim non-residential buildings. |
| ALLOW_DESTRUCTION_BY_SLEDGEHAMMER | true | Allow players to destroy world objects with sledgehammers |
| SLEDGEHAMMER_ONLY_IN_SAFEHOUSE | false | Allow players to destroy world objects only in their safehouse |
| KICK_FAST_PLAYERS | false | Kick players that appear to be moving faster than is possible. May be buggy -- use with caution. |
| SERVER_PLAYER_ID | 88635698 | ServerPlayerID determines if a character is from another server, or single player. |
| RCON_PORT | 27015 | The port for the RCON (Remote Console) |
| STARTUP_ADMIN_CREDENTIALS | (empty) | Create user with password and grant admin on startup. Format: user:password (comma-separated). Example: Jimmy:SecretPass. User can log in first time with that password. |
| STARTUP_ADMIN_USERNAMES | (empty) | Grant admin only for existing users (comma-separated). Use if you don't need to set a password. Leave empty if using STARTUP_ADMIN_CREDENTIALS. |
| MEMORY_XMX_GB | 8 | Server maximum memory allocation in GB. Sets -Xmx in ProjectZomboid64.json |
| MEMORY_XMS_GB | Optional: Server initial memory allocation in GB. Sets -Xms in ProjectZomboid64.json. If not specified, only -Xmx is configured | |
| UPDATE_ON_START | true | If set to false, skips downloading and validating server files from Steam on startup. Useful to avoid overwriting server files on container restart. |
| SERVER_BRANCH | "" | Steam branch to install. Set to "unstable" for Build 42 Unstable branch, or leave empty for stable. |
| DISCORD_ENABLE | false | Enables global text chat integration with a Discord channel |
| DISCORD_TOKEN | Discord bot access token | |
| DISCORD_CHANNEL | The Discord channel name. | |
| DISCORD_CHANNEL_ID | The Discord channel ID. | |
| MAX_ACCOUNTS_PER_USER | 0 | Limits the number of different accounts a single Steam user may create on this server. |
| ALLOW_COOP | true | Allow co-op/splitscreen players |
| SLEEP_ALLOWED | false | Players are allowed to sleep when their survivor becomes tired, but they do not NEED to sleep |
| SLEEP_NEEDED | false | Players get tired and need to sleep. |
| KNOCKED_DOWN_ALLOWED | true | Knocked down allowed |
| SNEAK_MODE_HIDE_FROM_OTHER_PLAYERS | true | Sneak mode hide from other players |
| WORKSHOP_ITEMS | List Workshop Mod IDs for the server to download. Each must be separated by a semicolon. | |
| RESTART_SCHEDULE_CRON | (empty) | Optional. Cron expression for scheduled restarts (e.g. 0 4,10,16,22 * * * for 04:00, 10:00, 16:00, 22:00 UTC). Server broadcasts warnings, saves, then quits; Docker restarts the container. Leave empty to disable. |
| RESTART_WARNING_MINUTES | 15 | Minutes before restart to send the first in-game warning (then 5 min, 1 min). |
| RESTART_MESSAGE | Server restart | Message prefix broadcast to players before restart (e.g. "Server restart in 15 minutes"). |
| STEAM_SCOREBOARD | true | Show Steam usernames and avatars in the Players list. |
| STEAM_VAC | true | Enable the Steam VAC system |
| UPNP | true | Attempt to configure a UPnP-enabled internet gateway to automatically setup port forwarding rules. |
| VOICE_ENABLE | true | VOIP is enabled when checked |
| VOICE_MIN_DISTANCE | 10.0 | The minimum tile distance over which VOIP sounds can be heard. |
| VOICE_MAX_DISTANCE | 100.0 | The maximum tile distance over which VOIP sounds can be heard |
| VOICE_3D | true | Toggle directional audio for VOIP |
| SPEED_LIMIT | 70.0 | Minimum=10.00 Maximum=150.00 Default=70.00 |
| LOGIN_QUEUE_ENABLED | false | Login queue enabled |
| LOGIN_QUEUE_CONNECT_TIMEOUT | 60 | Minimum=20 Maximum=1200 Default=60 |
| SERVER_BROWSER_ANNOUNCED_IP | Set the IP from which the server is broadcast. | |
| PLAYER_RESPAWN_WITH_SELF | false | Players can respawn in-game at the coordinates where they died |
| PLAYER_RESPAWN_WITH_OTHER | false | Players can respawn in-game at a split screen / Remote Play player's location |
| FAST_FORWARD_MULTIPLIER | 40.0 | Governs how fast time passes while players sleep. |
| DISABLE_SAFEHOUSE_WHEN_PLAYER_CONNECTED | false | Safehouse acts like a normal house if a member of the safehouse is connected |
| FACTION | true | Players can create factions when true |
| FACTION_DAY_SURVIVED_TO_CREATE | 0 | Players must survive this number of in-game days before being allowed to create a faction |
| FACTION_PLAYERS_REQUIRED_FOR_TAG | 1 | Number of players required as faction members before the faction owner can create a group tag |
| DISABLE_RADIO_STAFF | false | Disables radio transmissions from players with an access level |
| DISABLE_RADIO_ADMIN | true | Disables radio transmissions from players with 'admin' access level |
| DISABLE_RADIO_GM | true | Disables radio transmissions from players with 'gm' access level |
| DISABLE_RADIO_OVERSEER | false | Disables radio transmissions from players with 'overseer' access level |
| DISABLE_RADIO_MODERATOR | false | Disables radio transmissions from players with 'moderator' access level |
| DISABLE_RADIO_INVISIBLE | true | Disables radio transmissions from invisible players |
| CLIENT_COMMAND_FILTER | -vehicle.*;+vehicle.damageWindow;+vehicle.fixPart;+vehicle.installPart;+vehicle.uninstallPart | Semicolon-separated list of commands that will not be written to the cmd.txt server log. |
| CLIENT_ACTION_LOGS | ISEnterVehicle;ISExitVehicle;ISTakeEngineParts; | Semicolon-separated list of actions that will be written to the ClientActionLogs.txt server log. |
| PERK_LOGS | true | Track changes in player perk levels in PerkLog.txt server log |
| ITEM_NUMBERS_LIMIT_PER_CONTAINER | 0 | Maximum number of items that can be placed in a container. |
| BLOOD_SPLAT_LIFESPAN_DAYS | 0 | Number of days before old blood splats are removed. |
| ALLOW_NON_ASCII_USERNAME | false | Allow use of non-ASCII (cyrillic etc) characters in usernames |
| BAN_KICK_GLOBAL_SOUND | true | Ban kick global sound |
| REMOVE_PLAYER_CORPSES_ON_CORPSE_REMOVAL | false | If enabled, when HoursForCorpseRemoval triggers, it will also remove player?s corpses from the ground. |
| TRASH_DELETE_ALL | false | If true, player can use the "delete all" button on bins |
| PVP_MELEE_WHILE_HIT_REACTION | false | If true, player can hit again when struck by another player. |
| MOUSE_OVER_TO_SEE_DISPLAY_NAME | true | If true, players will have to mouse over someone to see their display name. |
| HIDE_PLAYERS_BEHIND_YOU | true | If true, automatically hide the player you can't see (like zombies). |
| PVP_MELEE_DAMAGE_MODIFIER | 30.0 | Damage multiplier for PVP melee attacks. |
| PVP_FIREARM_DAMAGE_MODIFIER | 50.0 | Damage multiplier for PVP ranged attacks. |
| CAR_ENGINE_ATTRACTION_MODIFIER | 0.5 | Modify the range of zombie attraction to cars. |
| PLAYER_BUMP_PLAYER | false | Governs whether players bump (and knock over) other players when running through them. |
| MAP_REMOTE_PLAYER_VISIBILITY | 1 | Controls display of remote players on the in-game map. |
| BACKUPS_COUNT | 5 | Backups count |
| BACKUPS_ON_START | true | Backups on start |
| BACKUPS_ON_VERSION_CHANGE | true | Backups on version change |
| BACKUPS_PERIOD | 0 | Backups period |
| ANTI_CHEAT_PROTECTION_TYPE1 | true | Anti cheat protection type 1 |
| ANTI_CHEAT_PROTECTION_TYPE2 | true | Anti cheat protection type 2 |
| ANTI_CHEAT_PROTECTION_TYPE3 | true | Anti cheat protection type 3 |
| ANTI_CHEAT_PROTECTION_TYPE4 | true | Anti cheat protection type 4 |
| ANTI_CHEAT_PROTECTION_TYPE5 | true | Anti cheat protection type 5 |
| ANTI_CHEAT_PROTECTION_TYPE6 | true | Anti cheat protection type 6 |
| ANTI_CHEAT_PROTECTION_TYPE7 | true | Anti cheat protection type 7 |
| ANTI_CHEAT_PROTECTION_TYPE8 | true | Anti cheat protection type 8 |
| ANTI_CHEAT_PROTECTION_TYPE9 | true | Anti cheat protection type 9 |
| ANTI_CHEAT_PROTECTION_TYPE10 | true | Anti cheat protection type 10 |
| ANTI_CHEAT_PROTECTION_TYPE11 | true | Anti cheat protection type 11 |
| ANTI_CHEAT_PROTECTION_TYPE12 | true | Anti cheat protection type 12 |
| ANTI_CHEAT_PROTECTION_TYPE13 | true | Anti cheat protection type 13 |
| ANTI_CHEAT_PROTECTION_TYPE14 | true | Anti cheat protection type 14 |
| ANTI_CHEAT_PROTECTION_TYPE15 | true | Anti cheat protection type 15 |
| ANTI_CHEAT_PROTECTION_TYPE16 | true | Anti cheat protection type 16 |
| ANTI_CHEAT_PROTECTION_TYPE17 | true | Anti cheat protection type 17 |
| ANTI_CHEAT_PROTECTION_TYPE18 | true | Anti cheat protection type 18 |
| ANTI_CHEAT_PROTECTION_TYPE19 | true | Anti cheat protection type 19 |
| ANTI_CHEAT_PROTECTION_TYPE20 | true | Anti cheat protection type 20 |
| ANTI_CHEAT_PROTECTION_TYPE21 | true | Anti cheat protection type 21 |
| ANTI_CHEAT_PROTECTION_TYPE22 | true | Anti cheat protection type 22 |
| ANTI_CHEAT_PROTECTION_TYPE23 | true | Anti cheat protection type 23 |
| ANTI_CHEAT_PROTECTION_TYPE24 | true | Anti cheat protection type 24 |
| ANTI_CHEAT_PROTECTION_TYPE2_THRESHOLD_MULTIPLIER | 3.0 | Anti cheat protection type 2 threshold multiplier |
| ANTI_CHEAT_PROTECTION_TYPE3_THRESHOLD_MULTIPLIER | 1.0 | Anti cheat protection type 3 threshold multiplier |
| ANTI_CHEAT_PROTECTION_TYPE4_THRESHOLD_MULTIPLIER | 1.0 | Anti cheat protection type 4 threshold multiplier |
| ANTI_CHEAT_PROTECTION_TYPE9_THRESHOLD_MULTIPLIER | 1.0 | Anti cheat protection type 9 threshold multiplier |
| ANTI_CHEAT_PROTECTION_TYPE15_THRESHOLD_MULTIPLIER | 1.0 | Anti cheat protection type 15 threshold multiplier |
| ANTI_CHEAT_PROTECTION_TYPE20_THRESHOLD_MULTIPLIER | 1.0 | Anti cheat protection type 20 threshold multiplier |
| ANTI_CHEAT_PROTECTION_TYPE22_THRESHOLD_MULTIPLIER | 1.0 | Anti cheat protection type 22 threshold multiplier |
| ANTI_CHEAT_PROTECTION_TYPE24_THRESHOLD_MULTIPLIER | 6.0 | Anti cheat protection type 24 threshold multiplier |
You can build the image from the Dockerfile using the following command:
docker build -t indifferentbroccoli/projectzomboid-server-docker .Scripts live under /home/steam/server/. The entrypoint is init.sh.
| Script | Description |
|---|---|
| init.sh | Entrypoint. Sets PUID/PGID, installs/updates server from Steam (unless UPDATE_ON_START=false), configures memory, sets SIGTERM trap for graceful shutdown, optionally starts cron (scheduled restarts) and apply-startup-admins, then exec’s start.sh. |
| start.sh | Writes RCON config, runs compile-settings, patch-sandbox-loot, fix-mod-case-symlinks, patch-vehicle-nospawn, then starts the game server. Handles SIGTERM to run save + quit. |
| functions.sh | Shared helpers: logging, install, rcon-call, save_server, shutdown_server, check_admin_password, configure_memory. |
| compile-settings.sh | Generates Server/<SERVER_NAME>.ini from .env and scripts/templates/settings.ini.template when GENERATE_SETTINGS=true. |
| patch-sandbox-loot.sh | If SANDBOX_LOOT_MULTIPLIER is set, patches all *LootNew in Server/<SERVER_NAME>_SandboxVars.lua. |
| patch-vehicle-nospawn.sh | Sets spawnChance = 0 for 92amgeneralM998 and TrailerM101A3cargo (workshop 2642541073). |
| fix-mod-case-symlinks.sh | Creates symlinks for mods whose folder name differs from Mod ID (DayZ, VFE, Porsche 918, Lynx Pack). |
| apply-startup-admins.sh | Runs in background until RCON is up; creates users and/or grants admin from STARTUP_ADMIN_CREDENTIALS and STARTUP_ADMIN_USERNAMES. |
| scheduled-restart.sh | Called by cron when RESTART_SCHEDULE_CRON is set; broadcasts warnings, saves, then quits. |
| monitor-cheaters.sh | Optional: run from host or container to monitor cheaters in real time from AntiManquitos cheaters.txt (default). Can also detect Z despawn/spawn abuse (zombies removed in one zone and spawned in another) when Lua/zombie_zone_log.txt is present (see scripts/templates/ZombieZoneLogger.lua). Use --summary for one-shot report, --export csv for ban list. See script --help. |
| install.scmd / install_version.scmd | SteamCMD scripts to download the server (stable or branch from SERVER_BRANCH). |