Objektlager-Erweiterung für stapelbare Paletten
===============================================

Diese Mod ermöglicht es, Paletten in einem Objektlager übereinander zu stapeln, statt sie nur
nebeneinander abzustellen.

Sie funktioniert überall automatisch. Sobald die Mod installiert ist, kann jedes Objektlager Paletten stapeln.

Welche Basisspiel-Paletten gestapelt werden sollen (und in welcher Höhe), legt die XML-Datei "config/stackablePallets.xml" fest. 
Paletten, die in der Realität nicht gestapelt werden können (wie z.B. Milchkannen, Setzlinge, große Rollen und so weiter), sind dort ausgenommen.

Hinweis: Paletten erscheinen nur innerhalb des Lagers gestapelt. Beim Entladen werden sie wie gewohnt
nebeneinander auf dem Boden abgestellt, damit es zu keinen Fehlern kommt.


Für Modder
----------

Drei Faktoren entscheiden darüber, ob eine Palette gestapelt wird, wobei die folgende Prioritätsreihenfolge gilt:

    1. Die eigene <stackablePallets>-Liste eines Lagers        (höchste Priorität)
    2. Ein "stackingHeight"-Attribut in der Paletten-XML
    3. Die globale Liste in config/stackablePallets.xml        (niedrigste Priorität)

1. Eine eigene (gemoddete) Palette stapelbar machen
   Füge dem <pallet>-Element in der XML der eigenen Palette ein "stackingHeight"-Attribut hinzu.
   Sie wird dann in jedem Objektlager gestapelt dargestellt:

       <vehicle type="pallet" ... >
           <pallet linkNode="..." stackingHeight="1.15" stackMixedFillLevels="true">
               ...
           </pallet>
       </vehicle>

2. Einstellungen für die Palettenstapelung für ein bestimmtes Objektlager festlegen (hat Vorrang vor der globalen Liste):

       <objectStorage supportsPallets="true" ... >
           <stackablePallets>
               <pallet filename="myCustomPallet.xml" stackingHeight="1.1" stackMixedFillLevels="true"/>
           </stackablePallets>
       </objectStorage>

3. Ein Lager komplett vom Stapeln ausnehmen (stackPallets ist standardmäßig true):

       <objectStorage supportsPallets="true" stackPallets="false" ... >

4. Stapeln pro Lagerbereich begrenzen (kein neues Attribut nötig)
   Wie viele Paletten übereinander passen, wird durch das vorhandene "maxHeight"-Attribut jedes
   Lagerbereichs begrenzt. Um das Stapeln in einem bestimmten Bereich zu verhindern, setze dessen
   "maxHeight" auf etwa eine Palettenhöhe:

       <storageAreas>
           <storageArea startNode="..." endNode="..." maxHeight="1.2"/>   <!-- ~1 Lage: kein Stapeln -->
           <storageArea startNode="..." endNode="..." maxHeight="3.5"/>   <!-- stapelt normal -->
       </storageAreas>

5. Paletten in einem Objektlager um 90 Grad drehen
   Standardmäßig stehen die Paletten mit der kurzen Seite nach vorne (Anordnung im Basisspiel). 
   Setze „rotatePallets=„true““ im Objektlager, um jede Palette um 90 Grad zu drehen, sodass 
   sie stattdessen mit der langen Seite nach vorne steht.

       <objectStorage supportsPallets="true" rotatePallets="true" ... >

   „rotatePallets“ ist standardmäßig auf „false“ gesetzt. 
   Dies gilt für jede Palette in diesem Lager (unabhängig davon, ob sie stapelbar ist oder nicht)
   und ist unabhängig von „stackPallets“, sodass man sie 
   - rotieren kann, ohne zu stapeln
   - stapeln kann, ohne zu rotieren, 
   - oder beides.

   Hinweis: Das Drehen der Paletten verändert die Art und Weise, wie die Paletten im Objektlager
   angeordnet werden, wodurch sich die maximale Anzahl an Objekten ändern kann.

   Tipp: Wenn du die Optionen 2, 3 oder 5 verwendest, füge diese Mod als Abhängigkeit in 
   deine modDesc.xml hinzu, damit sie garantiert in der richtigen Reihenfolge geladen wird:

       <dependencies>
           <dependency>FS25_stackablePalletObjectStorageExtension</dependency>
       </dependencies>


Attributreferenz
----------------

<pallet> (Paletten-XML) und <stackablePallets><pallet> (Lager-XML):
- stackingHeight       Höhe einer Palette in Metern, für den vertikalen Abstand. Empfohlen: Ohne diesen
                       Wert verwendet das Spiel die Bounding-Box der Palette, die meist zu hoch ist und
                       Stapel schweben lässt.
- stackMixedFillLevels Optional, Standard true. Wenn true, teilen sich Paletten desselben Typs mit
                       unterschiedlichen Füllständen einen visuellen Stapel (Vorschau beim höchsten
                       vorhandenen Füllstand). Das Entlademenü listet weiterhin jeden Füllstand einzeln
                       auf und gibt korrekt gefüllte Paletten zurück. Mit false bleibt der Basisspiel-
                       Look, bei dem jeder Füllstand einen eigenen Stapel bildet.

   Diese beiden Attribute gehören an das <pallet>-Element - entweder in die eigene vehicle-XML einer
   Palette oder in eine <pallet>-Zeile innerhalb der <stackablePallets>-Liste eines Lagers:

       (a) in der EIGENEN vehicle-XML der Palette, am vorhandenen <pallet>-Element:
           <vehicle type="pallet" ... >
               <pallet linkNode="palletNode" stackingHeight="1.15" stackMixedFillLevels="true">
                   ...
               </pallet>
           </vehicle>

       (b) in der <stackablePallets>-Liste eines Lagers (siehe filename unten):
           <objectStorage>
               <stackablePallets>
                   <pallet filename="myCustomPallet.xml" stackingHeight="1.15" stackMixedFillLevels="true"/>
               </stackablePallets>
           </objectStorage>

Nur <stackablePallets><pallet>:
- filename             Das Ende des Config-XML-Dateinamens einer Palette (z. B. fillablePallet.xml). Jede
                       eingelagerte Palette, deren Config-Pfad mit dieser Zeichenkette endet, passt
                       (Basisspiel oder gemoddet). Die multiPurchase*-Kaufvarianten werden automatisch
                       über ihren Basisnamen erkannt.

       <objectStorage supportsPallets="true" ... >
           <stackablePallets>
               <pallet filename="fillablePallet.xml" stackingHeight="0.78"/>
           </stackablePallets>
       </objectStorage>

<objectStorage>:
- stackPallets         Optional, Standard true. false deaktiviert das Stapeln für dieses Lager.
- rotatePallets        Optional, Standard false. true platziert jede Palette in diesem Lager um 90 Grad
                       gedreht (an ihrer langen Seite) statt in der kurzen Basisspiel-Ausrichtung.
                       Unabhängig von stackPallets.

   Beide sind Attribute des <objectStorage>-Elements selbst:

       <objectStorage supportsPallets="true" stackPallets="false" rotatePallets="true" ... >
           ...
       </objectStorage>
