Zum Hauptinhalt springen

15. Shop Trigger

Übersicht​

Warnung außerhalb der Saison 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
Screenshot 1
Screenshot 2

Wie Holz funktioniert​

Hintergrund

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​

ParameterTypBeschreibungStandard
nodeNODE_INDEXTrigger-Node wo Spieler den Shop aktivieren kannPflicht
nameSTRINGName des Shops (wird in GUI angezeigt)"Shop"
logoSliceIdSTRINGLogo-Slice-ID für GUI-
WICHTIG

node und ein konfigurierter <palletSpawner> mit mindestens einer <spawnPlace> sind Pflicht – ohne sie startet der Shop nicht.

Optional

logoSliceId ist optional. Wird kein Wert angegeben, erscheint kein Logo im Shop-Dialog.

Paletten (pallets)​

ParameterTypBeschreibungStandard
loadAllBOOLAlle verfügbaren Paletten automatisch ladentrue
priceScaleFLOATGlobaler Preismultiplikator (Giants-Formel)1.0
EMPFEHLUNG

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

Optional

<pallet> Einträge werden nur benötigt wenn loadAll="false" gesetzt ist.

ParameterTypBeschreibungStandard
fillTypeSTRINGFillType-Name (z.B. WHEAT, FLOUR)Pflicht
priceFLOATDirekter Preis pro Palette-
priceScaleFLOATMultiplikator auf Giants-Ladenpreis-
palletXMLFileSTRINGPfad zu custom Paletten-XMLStandard-Palette

Holz (type)​

ParameterTypBeschreibungStandard
splitTypeSTRINGBaumtyp-Name der auf der Map existiertPflicht
pricePerMeterFLOATPreis pro Meter Holz50
lengthsSTRINGVerfügbare Längen in Metern (z.B. "1 3 5 10")"1 3 5"
diameterFLOATAngezeigter Durchmesser in Metern (nur GUI)0.4
iconFILENAMEEigenes Icon für diesen Baumtyp in der Shop-GUIWOOD-FillType-Icon
WICHTIG – Pfad für icon

Verwende relative Pfade zur Placeable-XML (z.B. icons/eiche.dds). $modDir funktioniert hier nicht.

Optional

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

Standard-FS25 Baumtypen

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​

splitTypeBeschreibung
AMERICANELMAmerikanische Ulme
APPLEApfelbaum
ASPENEspe
BEECHBuche
BETULAERMANIIErman-Birke
BOXELDEREschenahorn
CHERRYKirsche
CHINESEELMChinesische Ulme
DEADWOODTotholz
DOWNYSERVICEBERRYFelsenbirne
GOLDENRAINGoldregen
JAPANESEZELKOVAJapanische Zelkove
LODGEPOLEPINELodgepole-Kiefer
NORTHERNCATALPATrompetenbaum
OAKEiche
PINUSSYLVESTRISWaldkiefer (Scots Pine)
PINUSTABULIFORMISTafelkiefer (Chinesische Kiefer)
RAVAGEDAbgestorbener Baum
SHAGBARKHICKORYSchuppenbark-Hickory
TILIAAMURENSISAmur-Linde
TRANSPORTTransportbaum

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)
WICHTIG
  • shopTriggerNode muss CollisionFlag.PLAYER gesetzt 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​