Zum Hauptinhalt springen

1. Placeable Setup - XML Grundlagen

Übersicht

Warnung außerhalb der Saison

Die productionExtension Specialization ist das Herzstück des Production Extensions Systems. Sie ersetzt die Standard-Giants productionPoint Specialization und bietet deutlich mehr Funktionen.

WICHTIG

Du kannst entweder productionExtension ODER productionPoint verwenden, aber nicht beide gleichzeitig!

Voraussetzungen

Bevor du die productionExtension nutzen kannst, muss dein Placeable:

  1. ✅ Den Production Extensions Mod als Dependency haben

PlaceableType registrieren

In deiner modDesc.xml:

Dependencies setzen

Wichtig ansonsten wird dein Mod nicht gefunden, dies hier ist dort einzutragen FS25_ProductionExtensions.

<modDesc>
<dependencies>
<dependency>FS25_ProductionExtensions</dependency>
</dependencies>
</modDesc>

Dann in deiner Placeable-XML:

<placeable type="FS25_ProductionExtensions.extendedProductionPoint">
<!-- ... -->
</placeable>

Grundlegende XML-Struktur

Minimales Beispiel

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<placeable type="FS25_ProductionExtensions.extendedProductionPoint">
<storeData>
<name>Meine Produktion</name>
<price>25000</price>
<!-- ... weitere StoreData ... -->
</storeData>

<productionExtension>
<productions>
<production id="meineProduktion" name="$l10n_produktionsname" cyclesPerHour="2" costsPerActiveHour="10">
<inputs>
<input fillType="WHEAT" amount="1000"/>
</inputs>
<outputs>
<output fillType="FLOUR" amount="800"/>
</outputs>
</production>
</productions>
</productionExtension>
</placeable>
TIPP

Dies ist die absolut minimale Konfiguration. Weiter unten findest du erweiterte Optionen!

Wichtige XML-Parameter

<productionExtension> Hauptelement

ParameterTypBeschreibungStandard
descriptionIdStringID aus description.xml für Dialog-Beschreibung-
logoSliceIdStringLogo für GUI-Dialogs (z.B. "myMod.myLogo")-

Beispiel:

<productionExtension descriptionId="meineBrauerei" logoSliceId="myMod.breweryLogo">
<!-- ... -->
</productionExtension>
WICHTIG

Siehe auch: Descriptions und Logos

<production> Element

Jede Production definiert eine Produktionslinie:

ParameterTypBeschreibungPflicht
idStringEindeutige ID der Produktion
nameStringAnzeigename (kann $l10n_ sein)
cyclesPerHourFloatZyklen pro Stunde (z.B. 2 = alle 30min)
costsPerActiveHourFloatKosten pro Betriebsstunde

Beispiel:

<production id="brotBacken"
name="$l10n_production_bread"
cyclesPerHour="4"
costsPerActiveHour="15">
<!-- inputs/outputs -->
</production>

<inputs> und <outputs>

Definiere Ein- und Ausgänge:

<inputs>
<input fillType="WHEAT" amount="1000"/>
<input fillType="WATER" amount="500"/>
</inputs>

<outputs>
<output fillType="BREAD" amount="10" sellDirectly="false"/>
<output fillType="CHAFF" amount="100" sellDirectly="true"/>
</outputs>
ParameterBeschreibung
fillTypeFillType Name (WHEAT, FLOUR, etc.)
amountMenge pro Zyklus in Litern
sellDirectlytrue = Auto-Verkauf (nur outputs)

📷 [SCREENSHOT: InGame-Produktionsmenü mit mehreren Inputs/Outputs]

Trigger & Interaktion

Production Control Trigger

Erlaubt Spielern die Produktion zu starten/stoppen:

<productionExtension>
<productionControlTrigger node="0>1|2|0"/>

<productions>
<!-- ... -->
</productions>
</productionExtension>

Outsourcing Trigger

Öffnet den Output-Dialog zum Abtransport von Produkten:

<productionExtension>
<outsourcingTrigger node="0>1|3|0"/>

<productions>
<!-- ... -->
</productions>
</productionExtension>
Hinweis

Node-Syntax: 0>1|2|0 = i3d-Pfad zum Trigger-Node

Spawn Areas (Paletten-Spawn)

Definiere Bereiche, wo Output-Paletten spawnen:

<productionExtension>
<spawnAreas>
<spawnArea startNode="0>2|0|0"
endNode="0>2|0|1"
name="Haupt-Spawn"
palletRotationOffset="90"
palletSpacing="1.5"/>

<spawnArea startNode="0>2|1|0"
endNode="0>2|1|1"
name="Neben-Spawn"/>
</spawnAreas>

<productions>
<!-- ... -->
</productions>
</productionExtension>
ParameterTypBeschreibungStandard
startNodeNodeStart-Punkt des Spawn-Bereichs-
endNodeNodeEnd-Punkt des Spawn-Bereichs-
nameStringName des BereichsAuto
palletRotationOffsetFloatRotation in Grad0
palletSpacingFloatAbstand zwischen Paletten (m)1.5

Vollständiges Beispiel

Hier ein komplettes Beispiel mit allen Basis-Elementen:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<placeable type="FS25_ProductionExtensions.extendedProductionPoint">
<storeData>
<name>Moderne Bäckerei</name>
<price>85000</price>
<dailyUpkeep>50</dailyUpkeep>
<canBeSold>true</canBeSold>
</storeData>

<productionExtension descriptionId="bakery_modern" logoSliceId="myMod.bakeryLogo">

<!-- Trigger -->
<productionControlTrigger node="0>1|0|0"/>
<outsourcingTrigger node="0>1|0|1"/>

<!-- Spawn Areas -->
<spawnAreas>
<spawnArea startNode="0>2|0"
endNode="0>2|1"
name="Brot-Paletten"
palletSpacing="2.0"/>
</spawnAreas>

<!-- Produktionen -->
<productions>
<!-- Produktion 1: Brot -->
<production id="brot"
name="$l10n_production_bread"
cyclesPerHour="2"
costsPerActiveHour="20">
<inputs>
<input fillType="FLOUR" amount="500"/>
<input fillType="WATER" amount="200"/>
</inputs>
<outputs>
<output fillType="BREAD" amount="10"/>
</outputs>
</production>

<!-- Produktion 2: Kuchen -->
<production id="kuchen"
name="$l10n_production_cake"
cyclesPerHour="1"
costsPerActiveHour="30">
<inputs>
<input fillType="FLOUR" amount="300"/>
<input fillType="MILK" amount="100"/>
<input fillType="EGG" amount="50"/>
</inputs>
<outputs>
<output fillType="CAKE" amount="5"/>
</outputs>
</production>
</productions>

</productionExtension>
</placeable>

📷 [SCREENSHOT: Die fertige Bäckerei im Spiel mit GUI-Dialog]

Storage (Lager)

Füge Lager für Inputs/Outputs hinzu:

<productionExtension>
<storage>
<capacity fillType="FLOUR" capacity="10000"/>
<capacity fillType="WATER" capacity="5000"/>
<capacity fillType="BREAD" capacity="2000"/>
</storage>

<productions>
<!-- ... -->
</productions>
</productionExtension>
WICHTIG

Ohne Storage können Produktionen keine Inputs speichern!

Storage Header Konfiguration

Der Storage-Header im Info-Trigger kann angepasst werden:

<storage showHeader="true" headerText="$l10n_storage_kalkLager">
<capacity fillType="STONE" capacity="240000" />
<capacity fillType="LIME" capacity="240000" />
</storage>

Parameter:

ParameterTypBeschreibungStandard
showHeaderBooleanHeader im Info-Trigger anzeigentrue
headerTextStringHeader-Text (fest oder per $l10n_KEY)-

Priorität:

  1. headerText → Text direkt oder übersetzt via $l10n_KEY
  2. Standard → "Gebäudelager" / "Building Storage"

Beispiel mit Übersetzung (empfohlen):

Der $l10n_-Präfix wird automatisch im Kontext des eigenen Mods aufgelöst — der Key muss also in den eigenen Translation-Dateien des Mods stehen, nicht in ProductionExtension.

<!-- In LimeProduction.xml -->
<storage showHeader="true" headerText="$l10n_storage_kalkLager">
<capacity fillType="LIME" capacity="240000" />
</storage>
<!-- In translation_de.xml des eigenen Mods -->
<text name="storage_kalkLager" text="Kalk Lager" />

Beispiel mit festem Text:

<storage showHeader="true" headerText="Mein Lager">
<capacity fillType="FLOUR" capacity="10000" />
</storage>

Header ausblenden:

<storage showHeader="false">
<capacity fillType="FLOUR" capacity="10000" />
</storage>

Erweiterte Features

Nachdem du die Grundlagen verstanden hast, kannst du deine Produktion mit zusätzlichen Features erweitern:

Visuelle Features

Produktions-Features

Logistik-Features

Häufige Fehler

❌ "Production not loading"

Ursache: PlaceableType hat nicht die richtige Specialization

Lösung: Überprüfe, ob productionExtension registriert ist und NICHT productionPoint

❌ "No spawn area found"

Ursache: Start/End-Nodes für spawnArea existieren nicht

Lösung: Überprüfe die Node-Pfade im i3d mit dem Giants Editor

Nächste Schritte

  1. ✅ Erstelle eine einfache Produktion mit diesem Setup
  2. Lies die Status Lights Anleitung
  3. Füge Production State Visuals hinzu
  4. Erweitere mit Mix Recipes oder anderen Features

Beispiel-Dateien

Im examples/ Ordner findest du vollständige Beispiele:

  • example_01_single_lane_visual.xml - Einfache Produktion mit Visuals
  • example_02_single_lane_real_pallets.xml - Mit echten Paletten
  • 12_description.xml - Beispiel für description.xml
  • 13_logos_gui.xml - Beispiel für Logo-Integration
TIPP

Kopiere ein Beispiel und passe es an deine Bedürfnisse an!