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