Skip to content

Spawn System

ElGregor edited this page Aug 15, 2026 · 1 revision

Spawn-System — Regionen, Punkte, Koordinaten (B42)

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

Die drei Mechanismen im Überblick

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.

Region-Einträge: zwei Typen

Innerhalb von spawnregions.lua gibt es zwei Eintrags-Typen (Repo-Default, dokumentiert in spawns.yaml und docs/08):

  • file — zeigt auf die spawnpoints.lua einer 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 in Zomboid/Server/ (bei uns <SERVER>_ravencreek.lua). Volle eigene Kontrolle über Punkte und Berufe — das ist der Coop-Weg dieses Repos.

Das spawns.yaml-Schema

spawns.yaml ist die deklarative Quelle; scripts/spawns-generate.sh erzeugt daraus die exakten Lua-Dateien (Repo-Default). Zwei Bereiche:

regions — die Spawn-Regionen

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 ravencreekservertest_ravencreek.lua

custom_spawns — eigene Punkte

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

Koordinaten verstehen

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):

  1. https://map.projectzomboid.com öffnen, Karte „Raven Creek" wählen
  2. Links „Map Coordinates" aktivieren
  3. Zielpunkt anklicken → Cell (CelX/CelY) und Rel (RelX/RelY) ablesen
  4. Eintragen: worldX/worldY = Cell, posX/posY = Rel

Beispiel: Cell 24,58, Rel 150,150{ worldX = 24, worldY = 58, posX = 150, posY = 150, posZ = 0 }

Die 4 Coop-Spawns im Repo

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).

Lua-Syntax

servertest_spawnregions.lua (Regionen)

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" },
    }
end

Regeln (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 in Zomboid/Server/, volle eigene Kontrolle
  • Die Syntax ist empfindlich: Kommas, Anführungszeichen, Groß-/Kleinschreibung

serverfile: eigene Spawn-Punkte

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 },
        },
    }
end

Die Tabellen sind berufs-keyed: unemployed gilt für alle Berufe ohne eigene Tabelle (Community-Quelle: PZ-Community-Doku, docs/08).

Wie spawns-generate.sh daraus Lua erzeugt

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: bei type: file wird file = "media/maps/<folder>/spawnpoints.lua" erzeugt; ein vorhandenes folder_alt landet als Fallback-Kommentar dahinter. Bei type: serverfile entsteht serverfile = "servertest_<key>.lua".

  • servertest_<key>.lua je custom_spawns-Schlüssel — professions werden als Lua-Tabellen geschrieben, note als Kommentar hinter jedem Punkt, fehlendes posZ defaultet 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

Verifizierte Raven-Creek-Fakten (B42)

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).

Drei Namen, die nicht verwechselt werden dürfen

  • Workshop-ID 3484263516 — Steam-Identität der Mod (WorkshopItems=)
  • Mod-ID RavenCreekB42 — interner Mod-Identifikator aus der mod.info (Mods=)
  • Interner Map-Ordner — Verzeichnisname unter media/maps/ der Mod (Map=-Zeile und file=-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ägt Raven Creek B42 als primären Ordner mit RavenCreek als folder_alt; docs/08 dokumentiert RavenCreek (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).

Mod-Ordner auf dem Server finden

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.

Workflow: Spawns ändern

Ä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 nichts

Was 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).

Zusammenspiel mit Spawn Selector

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.

Troubleshooting

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

Clone this wiki locally