-
Notifications
You must be signed in to change notification settings - Fork 0
Mods Referenz
← Home
Diese Seite ist die vollständige Referenz der Mod-Verwaltung: Schema von
mods.yaml, alle im Repo geführten Mods mit exakten IDs, die vom Generator
erzeugten ini-Zeilen und die typischen Stolperfallen. Der prozedurale Ablauf
(„wie füge ich eine Mod hinzu?") steht auf Modding-Workflow.
Vertieft in Repo: docs/04-modding-workflow.md
mods.yaml ist die Single Source of Truth für alle Mods (Repo-Default).
Dort steht deklarativ, welche Mods existieren, welche aktiv sind, was voneinander
abhängt und welche Karten geladen werden. Alles andere entsteht automatisch:
make modsmake mods führt zwei Skripte hintereinander aus (Repo-Default, 1:1 aus dem
Makefile): zuerst scripts/mods-validate.sh (bricht bei Fehlern mit Exit 1 ab),
dann scripts/mods-generate.sh (erzeugt config/generated/workshop-items.txt).
Daraus folgt die Kernregel für die per envsubst gerenderten Werte: Die
Server-ini wird für diese Werte nie von Hand gepflegt. Die drei Zeilen
WorkshopItems=, Mods= und Map= werden allerdings nicht von
make render in die servertest.ini injiziert — scripts/render-config.sh
rendert nur die Templates unter config/templates/*.tmpl, und im Template
servertest.ini.tmpl sind die drei Zeilen auskommentiert
(Repo-Verhalten, render-config.sh + Template). Statt dessen erzeugt
make mods (scripts/mods-generate.sh) die drei Zeilen in
config/generated/workshop-items.txt, und das Skript weist im Log
ausdrücklich darauf hin, sie in ${SERVER_NAME}.ini zu übernehmen — das
heißt mit dem Repo-Default SERVER_NAME=servertest in
${PZ_DATA_DIR}/Server/servertest.ini (Repo-Stand: kein Automatismus;
Details siehe Architektur unter „Datenfluss (a)").
Achtung:
make renderallein nimmt dieWorkshopItems=/Mods=/Map=- Zeilen nicht in dieservertest.inimit. Wer die Zeilen nicht von Hand ausconfig/generated/workshop-items.txtin die Ini kopiert, hat nach dem nächsten Render- und Restart-Schritt eine Ini ohne diese drei Zeilen — die Mods liegen dann auf der Platte, werden aber nie geladen (häufigster Fehler laut docs/10, Community-Quelle: PZ-Community-Doku). Konkrete Schrittfolge mit dem manuellen Ini-Schritt steht in Modding-Workflow und Runbook-Raven-Creek.
Jeder Eintrag unter mods: hat folgende Felder (alle Bedeutungen Repo-Default,
1:1 aus mods.yaml-Kopf und scripts/mods-generate.sh):
| Feld | Typ | Bedeutung | Pflicht? |
|---|---|---|---|
name |
Text | Anzeigename der Mod (frei, nur Doku) | ja |
workshop_id |
Zahl | Steam-Workshop-ID aus der URL — landet in WorkshopItems=
|
ja |
mod_id |
Text | Interne ID aus der mod.info der Mod — landet in Mods=; der Generator setzt automatisch den B42-Backslash davor |
ja |
category |
Text | Kategorie = bestimmt die Load-Order (siehe unten) | ja |
enabled |
bool |
true/false — steuert, ob der Generator die Mod aufnimmt |
ja |
requires |
Liste |
mod_ids, die vor dieser Mod geladen sein müssen |
nein |
map_name |
Text | nur bei Karten: interner Map-Ordnername für die Map=-Zeile |
nur bei category: map
|
Die Reihenfolge der Kategorien ist fest im Generator verdrahtet
(ORDER = ["library", "framework", "map", "gameplay", "qol"], Repo-Default aus
scripts/mods-generate.sh):
library -> framework -> map -> gameplay -> qol
Innerhalb einer Kategorie zählt die Eintragsreihenfolge in mods.yaml
(Repo-Default). Warum diese Reihenfolge: Libraries und Frameworks müssen
geladen sein, bevor Content und QoL-Mods sie nutzen — die Eintragsreihenfolge
in Mods= ist die Ladereihenfolge, Frameworks zuerst
(Community-Quelle: PZ-Community-Doku, konsistent mit Repo-Workflow).
Die komplette Liste, 1:1 aus mods.yaml (alle Werte: Repo-Default; Stand der
Workshop-Verifikation laut mods.yaml-Kommentar: 2026-08-15). Workshop-Link-
Muster: https://steamcommunity.com/sharedfiles/filedetails/?id=<Workshop-ID>.
| Mod | mod_id | Workshop-ID | Kategorie | Aktiv |
|---|---|---|---|---|
| that DAMN Library | damnlib |
3171167894 | library | ja |
| NeatUI Framework [B42] | NeatUI_Framework |
3508537032 | framework | ja |
| Raven Creek B42 | RavenCreekB42 |
3484263516 | map | ja |
| West Point Expansion B42 | WestPointExpansionB42 |
3475754603 | map | nein |
| Common Sense | CommonSense |
2875848298 | gameplay | ja |
| Firearms B42 | FirearmsB42 |
2256623447 | gameplay | nein |
| Spawn Selector [B42 Stable] | SpawnSelector |
3772052709 | qol | ja |
| Neat Crafting | Neat_Crafting |
3502080466 | qol | ja |
| Neat Building | Neat_Building |
3536052310 | qol | nein |
| Project Cook | Project_Cook |
3490188370 | qol | ja |
| Proximity Inventory (B42.13 Fix, inoffiziell) | ProximityInventory4213 |
3624308198 | qol | ja |
| Mod | benötigt (requires) |
|---|---|
| Raven Creek B42 | damnlib |
| West Point Expansion B42 | damnlib |
| Neat Crafting | NeatUI_Framework |
| Neat Building | NeatUI_Framework |
| Project Cook | NeatUI_Framework |
Der Generator in scripts/mods-generate.sh filtert vor der Erzeugung:
mods = [m for m in data.get("mods", []) if m.get("enabled")] (Repo-Default). Eine
deaktivierte Mod erscheint also in keiner der drei Zeilen — sie wird weder
heruntergeladen noch geladen. Der Eintrag bleibt in mods.yaml erhalten und
kann jederzeit durch enabled: true wieder aktiviert werden.
Die drei deaktivierten Mods und ihre Begründungen (Repo-Default aus den mods.yaml-Kommentaren):
| Mod | Grund für enabled: false
|
|---|---|
| West Point Expansion B42 | B42-Populations-Bug in den Expansions-Zellen gemeldet (Aug 2026) — vor Aktivierung Workshop-Kommentare prüfen |
| Firearms B42 | nicht mit anderen Waffen-Overhauls mischen — Doppel-Items (Community-Quelle: docs/04 sinngemäß) |
| Neat Building | Stabilität: mehrere Server-Reports Aug 2026 — „Invalid SpriteConfig object!"-Warnungs-Spam korreliert mit Server-Lag; nach Fix durch Autor wieder aktivieren |
make mods erzeugt config/generated/workshop-items.txt. Mit dem aktuellen
Repo-Stand (8 aktive Mods, Repo-Default — identisch mit dem Beispiel in
docs/10-runbook-raven-creek.md) entsteht exakt:
WorkshopItems=3171167894;3508537032;3484263516;2875848298;3772052709;3502080466;3490188370;3624308198
Mods=\damnlib;\NeatUI_Framework;\RavenCreekB42;\CommonSense;\SpawnSelector;\Neat_Crafting;\Project_Cook;\ProximityInventory4213
Map=Raven Creek B42;Muldraugh, KYWas jede Zeile steuert (Repo-Default aus docs/10):
| Zeile | Inhalt | Steuert |
|---|---|---|
WorkshopItems= |
numerische Workshop-IDs (Reihenfolge egal) | nur den Download |
Mods= |
Mod-IDs mit führendem \ (Backslash ist B42-Pflicht) |
Laden + Load-Order |
Map= |
interne Map-Ordnernamen, semikolongetrennt | welches Terrain die Welt nutzt |
Karten-Mods tragen in mods.yaml ein map_name:; alle aktiven Karten landen in
der Map=-Zeile. Die Regeln (Community-Quelle: Repo-Changelog 0.3.0, im Repo
als verifiziert dokumentiert):
- Frühere Maps gewinnen: der Server liest von links nach rechts; bei Zell-Überlappungen setzt sich der zuerst gelistete Eintrag durch.
-
Muldraugh, KYimmer zuletzt: die Vanilla-Basismap steht ans Ende, sonst überschreibt sie Mod-Karten komplett. Der Generator hängt sie automatisch an (maps + ["Muldraugh, KY"], Repo-Default aus mods-generate.sh). -
Einträge sind interne Ordnernamen — nicht der Anzeigename und nicht die
Mod-ID. Trennzeichen ist nur das Semikolon (Map-Namen dürfen Kommas
enthalten:
Muldraugh, KY).
Wie der verbindliche Ordnername auf dem Server verifiziert wird, steht auf Spawn-System und Runbook-Raven-Creek.
- Workshop-Seite öffnen,
workshop_idaus der URL kopieren -
mod_idaus der Workshop-Beschreibung oder dermod.infoder Mod kopieren - Eintrag in
mods.yamlanlegen — Kategorie wählen (bestimmt die Load-Order),enabled: truesetzen, bei Kartenmap_nameeintragen -
make mods— validiert und generiert die neuen drei Zeilen -
Manuell in die Ini übernehmen: die Zeilen
WorkshopItems=/Mods=/Map=ausconfig/generated/workshop-items.txtin${PZ_DATA_DIR}/Server/servertest.inikopieren (mitSERVER_NAME=servertestals Repo-Default) — bevormake renderläuft, weilrender-config.shdie Zeilen nicht selbst injiziert (Repo-Stand, siehe Architektur „Datenfluss (a)"; ohne diesen Schritt laden die Mods still nicht). -
make renderund Server-Neustart (make restart)
Die ausführliche Variante mit Verifikation im Log steht auf Modding-Workflow.
Zwei Wege mit unterschiedlicher Wirkung (Repo-Default):
-
enabled: false— Empfehlung für alles, was später vielleicht wieder kommt: Eintrag bleibt dokumentiert,requires-Beziehungen bleiben sichtbar, die Mod verschwindet nur aus den generierten Zeilen. - Eintrag entfernen — nur bei endgültigem Ausstieg. Nachteil: Historie und Begründung gehen verloren; früher oder später tippt jemand die IDs neu ab.
In beiden Fällen: make mods, dann die neu generierten WorkshopItems=/Mods=/Map=-Zeilen aus config/generated/workshop-items.txt manuell in die servertest.ini übernehmen (kein Automatismus, siehe Prinzip oben) und zuletzt make render && make restart.
requires: ["<mod_id>", ...] deklariert, dass eine Mod andere Mod-IDs braucht.
scripts/mods-validate.sh prüft das beim Validieren (Repo-Default, 1:1 aus dem
Skript):
- Für jede aktivierte Mod muss jede ihrer
requires-IDs selbst aktiviert sein — fehlt sie oder ist sie deaktiviert, gibt es einen ERROR und Exit 1. - Deaktivierte Mods werden nicht auf ihre Abhängigkeiten geprüft (man kann also z. B. Neat Building deaktiviert lassen, ohne NeatUI_Framework zu verlieren — das braucht Neat Crafting weiterhin).
| Symptom | Ursache | Fix |
|---|---|---|
| Mod lädt still nicht | Eintrag fehlt in Mods= (nur WorkshopItems= gesetzt) — Download ohne Mods=-Eintrag heißt: Mod liegt auf der Platte, wird aber nie geladen (Community-Quelle: PZ-Community-Doku; häufigster Fehler laut docs/10) |
make mods, Mods=-Zeile prüfen, neu rendern |
| IDs verwechselt |
workshop_id (Zahl aus der URL) und mod_id (Text aus mod.info) vertauscht oder identisch vergeben |
beide Felder einzeln von der Workshop-Seite/mod.info ablesen |
| B41-Mod installiert | Build 41-Mods sind mit B42 inkompatibel (Repo-Regel aus mods.yaml-Kopf und README) | nur B42-Mods aufnehmen; B41-Eintrag entfernen |
| Validierung warnt bei neuer Mod mit Platzhalter-ID | workshop_id im Bereich 3600000000–3600000099 — dieser Bereich ist als TODO-Platzhalter markiert und erzeugt nur eine WARNung, keinen Abbruch (Repo-Default aus mods-validate.sh) | echte Workshop-ID von der Steam-Seite eintragen |
| Doppelte Fehlermeldungen beim Validieren | dieselbe workshop_id oder mod_id zweimal in mods.yaml — beides ist ein ERROR (Repo-Default) | Duplikat entfernen, make mods erneut |
| Mod nach Aktivierung instabil | wie bei Neat Building: Community-Reports korrelieren Mod-Warnungen mit Lag (Repo-Default-Begründung in mods.yaml) |
enabled: false, Workshop-Seite beobachten |
Zwei mod_ids im Repo sind laut mods.yaml-Kommentar noch nach dem ersten
Download zu verifizieren (FirearmsB42, SpawnSelector — beide derzeit
deaktiviert bzw. aktiv, Repo-Default-Hinweis in der YAML). Nach dem ersten
Download gilt: mod_id gegen die tatsächliche mod.info prüfen.
Weiter: Spawn-System · Modding-Workflow · Updates-und-Rollback
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