15. Shop Trigger
Übersicht
Der Shop Trigger ermöglicht es Spielern, Paletten und Holzstämme direkt bei Produktionsgebäuden oder an beliebigen Orten zu kaufen. Vorrausgesetzt man verbaut den Trigger.
- ✅ Kaufe Paletten mit verschiedenen FillTypes
- ✅ Kaufe echte Holzstämme (SplitShapes) in verschiedenen Baumarten und Längen
- ✅ Konfigurierbare Preise
- ✅ Multiplayer-fähig
- ✅ Geld wird automatisch vom Spieler abgezogen
Wie Holz funktioniert
Gespawnte Holzstämme sind echte SplitShapes - physische Welt-Objekte, genau wie Stämme die beim Baumfällen entstehen. Sie haben keinen FillType-Container. FS25 generiert Holzstämme (SplitShapes) intern über den TreePlantManager - denselben Mechanismus wie beim Baumfällen. Die Umrechnung zu WOOD passiert erst am woodTrigger, basierend auf Volumen × volumeToLiter des Baumtyps.
Workflow nach dem Kauf
Shop kaufen → Stamm spawnt als SplitShape
↓
Kran / Forwarder → Stamm transportieren
↓
woodTrigger an Produktion → Stamm wird zu WOOD FillType verarbeitet
↓
Produktion läuft mit WOOD als Input
XML-Konfiguration
Basis-Struktur
<productionExtension>
<shopTrigger node="shopTriggerNode"
name="Farm Shop"
logoSliceId="productionExtension.logo">
<!-- PalletSpawner (Pflicht - auch für Holz-Spawn-Position) -->
<palletSpawner>
<spawnPlaces>
<spawnPlace startNode="spawnAreaStart" endNode="spawnAreaEnd" />
</spawnPlaces>
</palletSpawner>
<!-- Paletten-Konfiguration -->
<pallets loadAll="true" priceScale="1.0" />
<!-- Holz-Konfiguration -->
<wood>
<type splitType="PINUSSYLVESTRIS" pricePerMeter="50" lengths="1 3 5 10" diameter="0.4" icon="icons/kiefer.dds" />
<type splitType="BEECH" pricePerMeter="60" lengths="1 3 5" diameter="0.45" />
<type splitType="OAK" pricePerMeter="70" lengths="1 3 5" diameter="0.5" />
</wood>
</shopTrigger>
</productionExtension>
Parameter
shopTrigger
| Parameter | Typ | Beschreibung | Standard |
|---|---|---|---|
node | NODE_INDEX | Trigger-Node wo Spieler den Shop aktivieren kann | Pflicht |
name | STRING | Name des Shops (wird in GUI angezeigt) | "Shop" |
logoSliceId | STRING | Logo-Slice-ID für GUI | - |
node und ein konfigurierter <palletSpawner> mit mindestens einer <spawnPlace> sind Pflicht – ohne sie startet der Shop nicht.
logoSliceId ist optional. Wird kein Wert angegeben, erscheint kein Logo im Shop-Dialog.
Paletten (pallets)
| Parameter | Typ | Beschreibung | Standard |
|---|---|---|---|
loadAll | BOOL | Alle verfügbaren Paletten automatisch laden | true |
priceScale | FLOAT | Globaler Preismultiplikator (Giants-Formel) | 1.0 |
Nutze loadAll="true" für einen universellen Paletten-Shop. Wenn du nur bestimmte FillTypes anbieten willst, setze loadAll="false" und konfiguriere einzelne <pallet> Einträge.
Einzelne Palette (pallet)
<pallet> Einträge werden nur benötigt wenn loadAll="false" gesetzt ist.
| Parameter | Typ | Beschreibung | Standard |
|---|---|---|---|
fillType | STRING | FillType-Name (z.B. WHEAT, FLOUR) | Pflicht |
price | FLOAT | Direkter Preis pro Palette | - |
priceScale | FLOAT | Multiplikator auf Giants-Ladenpreis | - |
palletXMLFile | STRING | Pfad zu custom Paletten-XML | Standard-Palette |
Holz (type)
| Parameter | Typ | Beschreibung | Standard |
|---|---|---|---|
splitType | STRING | Baumtyp-Name der auf der Map existiert | Pflicht |
pricePerMeter | FLOAT | Preis pro Meter Holz | 50 |
lengths | STRING | Verfügbare Längen in Metern (z.B. "1 3 5 10") | "1 3 5" |
diameter | FLOAT | Angezeigter Durchmesser in Metern (nur GUI) | 0.4 |
icon | FILENAME | Eigenes Icon für diesen Baumtyp in der Shop-GUI | WOOD-FillType-Icon |
iconVerwende relative Pfade zur Placeable-XML (z.B. icons/eiche.dds). $modDir funktioniert hier nicht.
diameter beeinflusst nur die GUI-Anzeige, nicht den tatsächlich gespawnten Stamm. icon ist ebenfalls optional – ohne Angabe wird das Standard-WOOD-Icon verwendet.
Verfügbare Holzarten (splitType)
Die folgenden Typen stammen aus maps_treeTypes.xml (Standard-FS25).
Mod-Maps können zusätzliche Typen definieren (z.B. SPRUCE, BIRCH) — diese funktionieren ebenfalls, wenn sie auf der Map registriert sind.
Alle Standard-FS25 Baumtypen
| splitType | Beschreibung |
|---|---|
AMERICANELM | Amerikanische Ulme |
APPLE | Apfelbaum |
ASPEN | Espe |
BEECH | Buche |
BETULAERMANII | Erman-Birke |
BOXELDER | Eschenahorn |
CHERRY | Kirsche |
CHINESEELM | Chinesische Ulme |
DEADWOOD | Totholz |
DOWNYSERVICEBERRY | Felsenbirne |
GOLDENRAIN | Goldregen |
JAPANESEZELKOVA | Japanische Zelkove |
LODGEPOLEPINE | Lodgepole-Kiefer |
NORTHERNCATALPA | Trompetenbaum |
OAK | Eiche |
PINUSSYLVESTRIS | Waldkiefer (Scots Pine) |
PINUSTABULIFORMIS | Tafelkiefer (Chinesische Kiefer) |
RAVAGED | Abgestorbener Baum |
SHAGBARKHICKORY | Schuppenbark-Hickory |
TILIAAMURENSIS | Amur-Linde |
TRANSPORT | Transportbaum |
Verfügbare Typen der aktuellen Map ermitteln
Beim Laden der Placeable schreibt der ShopTrigger automatisch ins Log:
ShopTrigger: Available tree types on this map: BEECH, OAK, ASPEN, ...
Diese Namen kannst du direkt als splitType= verwenden.
I3D Scenegraph-Struktur
placeable
└─ shopTriggerNode (TransformGroup mit Trigger, CollisionFlag.PLAYER)
└─ spawnAreaStart (Start-Punkt des Spawn-Bereichs)
└─ spawnAreaEnd (End-Punkt des Spawn-Bereichs)
- shopTriggerNode muss
CollisionFlag.PLAYERgesetzt haben – sonst reagiert der Trigger nicht auf den Spieler - spawnArea definiert den Bereich wo Paletten und Stämme platziert werden
- Für Holz-Spawn empfiehlt sich ein größerer Bereich (Stämme sind bis 10m lang)
Beispiele
Beispiel 1: Einfacher Paletten-Shop
<shopTrigger node="shopTriggerNode" name="Saatgut-Shop">
<palletSpawner>
<spawnPlaces>
<spawnPlace startNode="spawnStart" endNode="spawnEnd" />
</spawnPlaces>
</palletSpawner>
<pallets loadAll="false">
<pallet fillType="SEEDS" priceScale="1.0" />
<pallet fillType="FERTILIZER" priceScale="1.0" />
<pallet fillType="LIQUIDFERTILIZER" priceScale="1.0" />
</pallets>
</shopTrigger>
Beispiel 2: Holz-Shop (Sägewerk)
<shopTrigger node="shopTriggerNode" name="Holzhandel">
<palletSpawner>
<spawnPlaces>
<spawnPlace startNode="logSpawnStart" endNode="logSpawnEnd" />
</spawnPlaces>
</palletSpawner>
<wood>
<type splitType="PINUSSYLVESTRIS" pricePerMeter="50" lengths="1 3 5 10" diameter="0.4" icon="icons/kiefer.dds" />
<type splitType="BEECH" pricePerMeter="60" lengths="1 3 5" diameter="0.45" icon="icons/buche.dds" />
<type splitType="OAK" pricePerMeter="70" lengths="1 3 5" diameter="0.5" icon="icons/eiche.dds" />
<type splitType="ASPEN" pricePerMeter="40" lengths="1 3 5" diameter="0.35" />
</wood>
</shopTrigger>
Was passiert:
- Spieler kauft z.B. 5m Waldkiefer für 50 × 5 = 250€
- Ein echter Holzstamm (SplitShape) spawnt am spawnPlace
- Stamm kann mit Kran aufgenommen und zum woodTrigger transportiert werden
- Am woodTrigger wird er zu WOOD FillType verarbeitet
Beispiel 3: Kombination (Paletten + Holz)
<shopTrigger node="shopTriggerNode" name="Baustoffhandel">
<palletSpawner>
<spawnPlaces>
<spawnPlace startNode="spawnStart" endNode="spawnEnd" />
</spawnPlaces>
</palletSpawner>
<pallets loadAll="false">
<pallet fillType="CONCRETE" priceScale="1.0" />
</pallets>
<wood>
<type splitType="BEECH" pricePerMeter="55" lengths="3 5 10" diameter="0.4" />
</wood>
</shopTrigger>
Häufige Fehler
❌ "splitType X has no treeType on this map"
Problem: Der konfigurierte splitType existiert auf der aktuellen Map nicht.
Lösung: Schaue im Log nach der Zeile:
ShopTrigger: Available tree types on this map: ...
und verwende einen der dort aufgelisteten Typen.
<!-- Funktioniert nur auf Maps mit SPRUCE (Mod-Maps): -->
<type splitType="SPRUCE" pricePerMeter="50" />
<!-- Funktioniert auf allen Standard-FS25-Maps: -->
<type splitType="PINUSSYLVESTRIS" pricePerMeter="50" />
❌ "Invalid splitType"
Problem: Der SplitType-Name existiert im SplitShapeManager nicht.
Lösung: Schreibfehler prüfen, Namen aus der Log-Ausgabe verwenden.
❌ Shop-Trigger aktiviert sich nicht
Problem: Trigger hat kein CollisionFlag.PLAYER gesetzt.
Lösung: Im Giants Editor den Trigger-Node auswählen und Collision Mask auf Player (Bit 20) setzen.
❌ Holzstamm spawnt im Boden / fliegt
Problem: spawnArea liegt zu tief oder zu hoch.
Lösung: spawnAreaStart/End auf Bodenhöhe + ca. 1m setzen. Der Stamm fällt durch die Physik auf den Boden.
Verwandte Features
- Animal Unload Trigger - Ähnliches Trigger-System für Tiere
- Production Display - Informations-Anzeige

