-
Notifications
You must be signed in to change notification settings - Fork 0
Spawn System
← Home
Der komplette Guide zum Spawn-System auf dedizierten Servern: die drei
Mechanismen, exakte Lua-Syntax, das spawns.yaml-Schema des Repos, das
Koordinatensystem inklusive verifizierter Raven-Creek-Zellen und
Fehlerbehebung. Diese Seite kombiniert Referenz und Guide — das
Schritt-für-Schritt-Deployment einer neuen Karte steht auf Runbook-Raven-Creek.
Vertieft in Repo: docs/08-spawnpoints.md
Ein dedizierter Server kennt drei Wege, Spawn-Punkte zu steuern (alle drei: Community-Quelle: PZ-Community-Doku, im Repo dokumentiert in docs/08):
| Mechanismus | Datei (in Zomboid/Server/) |
Effekt |
|---|---|---|
| Spawn-Regionen | <SERVER>_spawnregions.lua |
Liste wählbarer Städte bei Charaktererstellung |
| Spawn-Punkte |
<SERVER>_spawnpoints.lua bzw. eigene *.lua
|
Exakte Koordinaten pro Region/Beruf |
| Fixpunkt |
SpawnPoint=x,y,z in <SERVER>.ini
|
Erzwingt EINEN Punkt, überschreibt alles |
Das Setup dieses Repos nutzt Regionen plus eigene Punkte. SpawnPoint bleibt
deshalb auf 0,0,0 (Repo-Default im ini-Template) — sonst werden die Regionen
komplett ignoriert und alle Spieler starten am selben Punkt.
Innerhalb von spawnregions.lua gibt es zwei Eintrags-Typen (Repo-Default,
dokumentiert in spawns.yaml und docs/08):
-
file— zeigt auf diespawnpoints.luaeiner Map/Mod (media/maps/<Ordner>/spawnpoints.lua). Gut für Vanilla-Städte und fertige Mod-Karten; die Punkte definiert der Map-Autor. -
serverfile— verweist auf eine eigene Datei inZomboid/Server/(bei uns<SERVER>_ravencreek.lua). Volle eigene Kontrolle über Punkte und Berufe — das ist der Coop-Weg dieses Repos.
spawns.yaml ist die deklarative Quelle; scripts/spawns-generate.sh erzeugt
daraus die exakten Lua-Dateien (Repo-Default). Zwei Bereiche:
Reihenfolge der Einträge = Reihenfolge im Spawn-Menü (Repo-Default). Felder je Eintrag (1:1 aus spawns.yaml):
| Feld | Bedeutung | Pflicht? |
|---|---|---|
name |
Anzeigename im Spawn-Menü (frei wählbar) | ja |
type |
file (Mod/Vanilla-Datei) oder serverfile (eigene Datei) |
ja |
folder |
bei type: file: interner Map-Ordner (media/maps/<folder>/) |
bei file
|
folder_alt |
Fallback-Ordnername; der Generator schreibt ihn als Kommentar in die Lua | nein |
workshop_id |
Doku-Hinweis: zugehörige Workshop-ID der Karte | nein |
key |
bei type: serverfile: Datei-Suffix → erzeugt <SERVER>_<key>.lua
|
bei serverfile
|
Aktueller Bestand (alle Werte Repo-Default, 1:1 aus spawns.yaml):
| Region | Typ | Ordner/key |
|---|---|---|
| Muldraugh, KY | file | Muldraugh, KY |
| Riverside, KY | file | Riverside, KY |
| Rosewood, KY | file | Rosewood, KY |
| West Point, KY | file | West Point, KY |
| Raven Creek | file |
Raven Creek B42 (Fallback: RavenCreek), Workshop 3484263516 |
| Raven Creek - Coop Start | serverfile | key ravencreek → servertest_ravencreek.lua
|
Aufbau: <key> → professions → Liste von Punkten. Jeder Punkt hat
(1:1 aus spawns.yaml):
| Feld | Bedeutung |
|---|---|
worldX / worldY
|
Zelle (Cell) im Welt-Raster |
posX / posY
|
Position innerhalb der Zelle, relativ (0–299) |
posZ |
Etage (0 = Erdgeschoss) |
note |
optionaler Kommentar; landet als Lua-Kommentar in der generierten Datei |
Das Koordinatensystem (Community-Quelle: PZ-Kartensystem, dokumentiert in docs/08 und den Lua-Köpfen des Repos):
-
worldX/worldY= Zelle (Cell) — das grobe Raster der Welt; jede Zelle misst 300×300 Tiles. -
posX/posY= Position in der Zelle — relativ, gültig 0–299. -
posZ= Etage — 0 ist Erdgeschoss; für Boden-Spawns immer 0.
Feinposition auf der Karte prüfen (Community-Quelle: map.projectzomboid.com, Anleitung in docs/08):
- https://map.projectzomboid.com öffnen, Karte „Raven Creek" wählen
- Links „Map Coordinates" aktivieren
- Zielpunkt anklicken → Cell (CelX/CelY) und Rel (RelX/RelY) ablesen
- Eintragen:
worldX/worldY= Cell,posX/posY= Rel
Beispiel: Cell 24,58, Rel 150,150 →
{ worldX = 24, worldY = 58, posX = 150, posY = 150, posZ = 0 }
Alle vier Punkte liegen in verifizierten Raven-Creek-Zellen, Berufsschlüssel
ist unemployed (Fallback für alle Berufe ohne eigene Tabelle). Werte 1:1 aus
spawns.yaml (Repo-Default):
| # | worldX | worldY | posX | posY | posZ | note |
|---|---|---|---|---|---|---|
| 1 | 17 | 66 | 150 | 150 | 0 | Westliches Wohngebiet - ruhiger Einstieg |
| 2 | 20 | 64 | 150 | 150 | 0 | Stadtzentrum |
| 3 | 22 | 68 | 150 | 150 | 0 | Suedost-Rand |
| 4 | 24 | 58 | 150 | 150 | 0 | Downtown-Naehe (mehr Loot + Zombies) |
Mehrere Punkte pro Beruf = Zufallsauswahl unter diesen (Community-Quelle:
PZ-Community-Doku, docs/08). Berufsspezifische Tabellen sind beliebig
erweiterbar — spawns.yaml enthält ein auskommentiertes policeofficer-Beispiel
(Repo-Default).
So sieht die Datei aus, die der Server liest (statische Vorlage im Repo:
config/spawns/servertest_spawnregions.lua, gekürzt — Riverside/Rosewood/
West Point der Vorlage hier weggelassen; die vollständige Regionstabelle
steht oben im Abschnitt regions; alle Pfade Repo-Default):
function SpawnRegions()
return {
-- Typ 1: "file" - zeigt auf die spawnpoints.lua einer Map/Mod
{ name = "Muldraugh, KY", file = "media/maps/Muldraugh, KY/spawnpoints.lua" },
{ name = "Raven Creek", file = "media/maps/RavenCreek/spawnpoints.lua" },
-- Typ 2: "serverfile" - eigene Datei in Zomboid/Server/
{ name = "Raven Creek - Coop Start", serverfile = "servertest_ravencreek.lua" },
}
endRegeln (docs/08, Repo-Default):
-
name= frei wählbarer Anzeigename im Spawn-Menü -
file= Pfad relativ zum Map-Verzeichnis, case-sensitiv, muss exakt zum internen Ordnernamen der Mod passen -
serverfile= Dateiname inZomboid/Server/, volle eigene Kontrolle - Die Syntax ist empfindlich: Kommas, Anführungszeichen, Groß-/Kleinschreibung
config/spawns/servertest_ravencreek.lua (Repo-Default, gekürzt auf einen
Punkt):
function SpawnPoints()
return {
-- "unemployed" = Fallback fuer ALLE Berufe ohne eigene Tabelle
unemployed = {
{ worldX = 20, worldY = 64, posX = 150, posY = 150, posZ = 0 },
},
policeofficer = {
{ worldX = 20, worldY = 63, posX = 150, posY = 150, posZ = 0 },
},
}
endDie Tabellen sind berufs-keyed: unemployed gilt für alle Berufe ohne
eigene Tabelle (Community-Quelle: PZ-Community-Doku, docs/08).
make spawns ruft scripts/spawns-generate.sh auf (Repo-Default). Das Skript
liest spawns.yaml und schreibt nach config/generated/spawns/:
-
servertest_spawnregions.lua— je Region eine Zeile: beitype: filewirdfile = "media/maps/<folder>/spawnpoints.lua"erzeugt; ein vorhandenesfolder_altlandet als Fallback-Kommentar dahinter. Beitype: serverfileentstehtserverfile = "servertest_<key>.lua". -
servertest_<key>.luajecustom_spawns-Schlüssel —professionswerden als Lua-Tabellen geschrieben,noteals Kommentar hinter jedem Punkt, fehlendesposZdefaultet auf 0. -
Jede Datei erhält den zweizeiligen Header (Repo-Default, 1:1 aus spawns-generate.sh):
-- GENERIERT aus spawns.yaml - NICHT manuell editieren! -- Neu generieren: make spawns
| Fakt | Wert | Quelle |
|---|---|---|
| Workshop-ID |
3484263516 („Raven Creek B42") |
Community-Quelle: Steam Workshop; Repo-Default in mods.yaml/spawns.yaml |
| Mod-ID | RavenCreekB42 |
Repo-Default (mods.yaml) |
| Interner Map-Ordner | Kandidaten: Raven Creek B42 (spawns.yaml primary) bzw. RavenCreek (Fallback; docs/08 nennt RavenCreek als verifiziert) |
Community-Quelle: verifizierte B42.13-MP-Serverconfig bzw. map.projectzomboid.com-B42-Pfad + Server-Configs (Repo-Recherche lt. CHANGELOG 0.2.1) — vor Verwendung per ls verifizieren (siehe unten) |
| Zell-Rechtecke (B42) | Block A: x=16–23, y=59–69 / Block B: x=24–25, y=56–69 | Community-Quelle: map_info.json (B42.19), dokumentiert in docs/08 + CHANGELOG 0.2.1 |
Die cell_rects aus der offiziellen Karten-map_info.json
(Community-Quelle: docs/08): [[16, 59, 8, 11], [24, 56, 2, 14]] = Startzelle
(16,59) mit 8×11 Zellen plus Startzelle (24,56) mit 2×14 Zellen. Alles
außerhalb dieser Zellen ist Wasser/Nicht-Karte — Spawns dort landen im Void.
Wichtig: Der Westrand (x=16) ist Küste. Mindestens x=17 verwenden (Community-Quelle: docs/08 auf Basis map_info.json).
-
Workshop-ID
3484263516— Steam-Identität der Mod (WorkshopItems=) -
Mod-ID
RavenCreekB42— interner Mod-Identifikator aus dermod.info(Mods=) -
Interner Map-Ordner — Verzeichnisname unter
media/maps/der Mod (Map=-Zeile undfile=-Pfad). Genau DER ist bei Raven Creek B42 je nach Mod-Version einer der beiden Kandidaten — deshalb der Pflicht-Verifikations- Schritt. Das Repo deckt beide ab: spawns.yaml trägtRaven Creek B42als primären Ordner mitRavenCreekalsfolder_alt; docs/08 dokumentiertRavenCreek(ohne Leerzeichen) als verifizierten Ordner des B42-Ports. Wer den Generator laufen lässt, bekommt den Fallback als Kommentar in die Lua geschrieben und kann nach der Verifikation den richtigen Namen in spawns.yaml eintragen (Repo-Default).
Nach dem ersten Serverstart mit aktiver Mod (Pfad: Community-Quelle: SteamCMD-Workshop-Layout, dokumentiert in docs/08):
# Linux (SteamCMD-Installation)
ls ~/Steam/steamapps/workshop/content/108600/3484263516/mods/
# -> zeigt den Mod-Ordner, darunter: media/maps/<Kartenordner>/
ls ~/Steam/steamapps/workshop/content/108600/3484263516/mods/*/media/maps/Allgemein: steamapps/workshop/content/108600/<Workshop-ID>/mods/<ordner>
(Community-Quelle: SteamCMD-Workshop-Layout). Der Ordnername unter
media/maps/ ist der verbindliche Name für
file = "media/maps/<DIESER NAME>/spawnpoints.lua" und für die Map=-Zeile.
Änderungen laufen immer über spawns.yaml, nie über die fertigen Lua-Dateien
(Repo-Default):
$EDITOR spawns.yaml # Region oder Punkte anpassen
make spawns # erzeugt config/generated/spawns/*.lua neu
make render # kopiert nach Zomboid/Server/ (Prefix = SERVER_NAME)
make restart # Server neu starten - sonst wirkt nichtsWas render-config.sh bei Spawn-Dateien tut (Repo-Default, 1:1 aus dem
Skript): Existiert das Verzeichnis config/generated/spawns/, werden die
generierten Dateien bevorzugt; andernfalls die Vorlagen aus
config/spawns/. Alle Dateien werden mit
servertest → <SERVER_NAME>-Prefix-Umbenennung nach ${PZ_DATA_DIR}/Server/
kopiert.
Test: neuen Charakter erstellen — „Raven Creek - Coop Start" muss in der Spawn-Auswahl erscheinen (Repo-Default-Verifikation aus docs/08).
Spawn Selector (Workshop 3772052709, Repo-Default in mods.yaml) zeigt die hier definierten Regionen und Punkte in-game als Auswahlkarte (Community-Quelle: Workshop-Beschreibung, dokumentiert in docs/08). Ideal für Coop: alle wählen bewusst denselben Startpunkt — keiner strandet allein in Muldraugh.
| Symptom | Ursache | Fix |
|---|---|---|
| Region fehlt im Spawn-Menü |
file=-Pfad passt nicht zum Mod-Ordner |
echten Ordnernamen per ls prüfen (Abschnitt „Mod-Ordner auf dem Server finden") |
| Spawn im Void/Wasser | Zelle außerhalb der cell_rects | nur x=16–25, y=56–69 nutzen; Westrand x=16 meiden (Community-Quelle: map_info.json, docs/08) |
| Änderung wirkt nicht | Server nicht neu gestartet | make restart |
| Alle spawnen am selben Punkt |
SpawnPoint in der .ini ≠ 0,0,0 |
SpawnPoint=0,0,0 setzen (Repo-Default) |
| Mod-Spawns laden nicht | Mod nicht aktiv / Map= fehlt |
make mods, Map=-Zeile prüfen (Mods-Referenz) |
| Lua-Fehler beim Start | Syntax (Komma/Quote/Casing) |
make spawns neu generieren lassen statt Hand-Edit |
| Coop-Start fehlt im Menü | serverfile nicht kopiert |
make render erneut ausführen, Neustart |
Details zur Fehler-Diagnose beim ersten Deployment (Log-Zeilen, was gut aussieht) stehen auf Runbook-Raven-Creek.
Weiter: Runbook-Raven-Creek · Mods-Referenz · Troubleshooting
Labels: Community-Quelle = extern belegt (Herkunft in Klammern, z. B. pzwiki, Steam-Diskussionen, GCP-Preisliste) · Repo-Default = steht genau so im Repo (Template, Skript oder .env.example) · Heuristik = begründete Empfehlung dieses Projekts, nicht extern verifiziert.
The Indie Stone (TIS) publiziert keine offiziellen Storage-/IOPS-/Performance-Specs — Zahlen in diesem Wiki nie als TIS-Anforderung lesen.
Inhalte zielen auf den B42-Stable-Branch: seit B42.20 der Default-Zweig in Steam, kein -beta-Opt-in nötig (Community-Quelle).
Details zu Labels, Quellen und Redaktionsregeln: Konventionen-und-Quellen.
Einstieg
Referenz
- Makefile-Referenz
- Cheatsheet-Tagesbetrieb
- ENV-Variablen
- Server-Konfiguration
- Admin-Befehle
- Mods-Referenz
- Spawn-System
- Skripte-Referenz
- systemd-Referenz
- Ports-und-Netzwerk
- SteamCMD-Referenz
Betrieb
- Wartung-und-Automatik
- Backup-und-Restore
- Updates-und-Rollback
- Monitoring-und-Alerts
- Sicherheit-und-Hardening
- Docker-Betrieb
- GCP-Failover
Tiefenwissen
- Modding-Workflow
- Performance-Guide
- Storage-und-Map-Streaming
- Hardware-Empfehlungen
- Troubleshooting
- Runbook-Raven-Creek
Meta