Transformer usine de production du jeu en mod et changer sa production

Vos forums pour toutes les discussions sur le modding.
Greg78
Posts: 611
Joined: Sat Jun 24, 2017 9:09 am
Location: somewhere where you're not

Transformer usine de production du jeu en mod et changer sa production

Post by Greg78 »

Hello à tous,
je voulais tenter une bidouille qui ne marche pas... et j'avoue que je suis un peu perdu..

Je souhaitais utiliser l'une des "usines" de production de base du jeu, en créer un mod, et changer son type de production (pour résumer)...
J'ai donc pris le xml d'une autre usine, pour modifier les input/outpout...jusque là ça va...sauf que j'ai un vilain warning ...et "l'usine" qui n'apparait pas dans le mode construction, avec le message "impossible de placer l'objet"...

Si je pouvais avoir de l'aide... voilà le warning que j'ai...(oui, je sais, j'utilise l'usine de raisin pour fabriquer autre chose...)

Code: Select all

Error: C:/Users/gwegw/Documents/My Games/FarmingSimulator2022/mods/FS22_my_oilFactory/raisinFactory.xml. Error=XML_ERROR_MISMATCHED_ELEMENT ErrorID=14 (0xe) Line number=2: XMLElement name=placeable.
Si je pige bien le warning, ce serait "ligne 2" de mon "raisinFactory.xml" qu'il y aurait un soucis? Pourtant c'est bien un "productionPoint", non? (j'ai essayé de regarder avec d'autres mods du genre, la "fabrique de chaux" sur base de l'usine de raisin......je vois pas trop où je foire...) :hmm: :search:

Code: Select all

<?xml version='1.0' encoding='utf-8'?>
<placeable type="productionPoint">
  <storeData>
        <name>$l10n_shopItem_oilMill</name>
        <functions>
            <function>$l10n_function_productionPoint</function>
        </functions>
        <image>store_raisinFactory.dds</image>
        <price>80000</price>
        <lifetime>1000</lifetime>
        <rotation>0</rotation>
        <brand>NONE</brand>
        <species>placeable</species>
        <category>productionPoints</category>
Merci d'avance de votre aide
Joueur FS17 sur PS4 et PC depuis juillet 2018
Joueur FS19 sur PC
"Seasons" ou ce qu'il manquait à FS19 pour m'y faire vraiment jouer
Joueur FS22 sur PC - Haut-Beyl' / Calmsden / Alex Prodeal Farm
FusingGrain
Posts: 692
Joined: Tue Sep 01, 2015 6:32 am

Re: Transformer usine de production du jeu en mod et changer sa production

Post by FusingGrain »

Greg78 wrote: Sat Mar 19, 2022 9:44 pm

Code: Select all

<?xml version='1.0' encoding='utf-8'?>
<placeable type="productionPoint">
  <storeData>
        <name>$l10n_shopItem_oilMill</name>
        <functions>
            <function>$l10n_function_productionPoint</function>
        </functions>
        <image>store_raisinFactory.dds</image>
        <price>80000</price>
        <lifetime>1000</lifetime>
        <rotation>0</rotation>
        <brand>NONE</brand>
        <species>placeable</species>
        <category>productionPoints</category>
Salut, logique ton erreur, il te manque la fin de la ligne, tu a ca dans ta ligne:

Code: Select all

<placeable type="productionPoint">
alors qu'une industrie a ceci en ligne 2:

Code: Select all

<placeable type="productionPoint" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../shared/xml/schema/placeable.xsd">
la ligne complete à son importance, surtout dans les xml, corrige, teste et tiens nous au courant..

FusingGrain
Greg78
Posts: 611
Joined: Sat Jun 24, 2017 9:09 am
Location: somewhere where you're not

Re: Transformer usine de production du jeu en mod et changer sa production

Post by Greg78 »

Hello FusingGrain,

testé et corrigé...toujours le même warning.
J'ai vu des mods dont je me suis inspiré pour le xml qui ont cette ligne "incomplète" et qui pourtant ne génèrent pas d'erreur (le Sugar bett processing de Vertex).
Du coup..y'a forcément une merdouille quelquepart (voire, pas q'une...) mais ...je sèche.
Joueur FS17 sur PS4 et PC depuis juillet 2018
Joueur FS19 sur PC
"Seasons" ou ce qu'il manquait à FS19 pour m'y faire vraiment jouer
Joueur FS22 sur PC - Haut-Beyl' / Calmsden / Alex Prodeal Farm
FusingGrain
Posts: 692
Joined: Tue Sep 01, 2015 6:32 am

Re: Transformer usine de production du jeu en mod et changer sa production

Post by FusingGrain »

Salut,

Met ton xml en piece jointe ce sera plus facile pour comprendre ce qui se passe, car par expérience si le log dis ligne 2 ca peut etre plus bas ou plus haut aussi, en fait il prend en compte le bloc, pense aussi a utiliser notepad++ plus facile de lire et modifier avec lui.

FusingGrain
Greg78
Posts: 611
Joined: Sat Jun 24, 2017 9:09 am
Location: somewhere where you're not

Re: Transformer usine de production du jeu en mod et changer sa production

Post by Greg78 »

Pour Notepad++, c'est lui que j'utilise depuis longtemps, car effectivement, c'est bien plus facile de lire les lignes de code des xml.

Voilà mon xml là dessous
Il se peut qu'en voulant créer un hybride d'usine de production...j'ai créé un monstre qui ne fonctionne pas du tout :mrgreen: :sadnew: (je n'ai pas osé toucher au nom de l'i3d...du coup, je traine du raisinFactory un peu partout... :blushnew:

Code: Select all

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<placeable type="productionPoint" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../shared/xml/schema/placeable.xsd">
  <storeData>
        <name>$l10n_shopItem_oilMill</name>
        <functions>
            <function>$l10n_function_productionPoint</function>
        </functions>
        <image>store_raisinFactory.dds</image>
        <price>80000</price>
        <lifetime>1000</lifetime>
        <rotation>0</rotation>
        <brand>NONE</brand>
        <species>placeable</species>
        <category>productionPoints</category>
        <brush>
            <type>placeable</type>
            <category>production</category>
            <tab>factories</tab>
        </brush>
        <vertexBufferMemoryUsage>1033728</vertexBufferMemoryUsage>
        <indexBufferMemoryUsage>152832</indexBufferMemoryUsage>
        <textureMemoryUsage>11730944</textureMemoryUsage>
        <instanceVertexBufferMemoryUsage>0</instanceVertexBufferMemoryUsage>
        <instanceIndexBufferMemoryUsage>0</instanceIndexBufferMemoryUsage>
        <audioMemoryUsage>0</audioMemoryUsage>
    </storeData>

    <base>
        <filename>raisinFactory.i3d</filename>
        <canBeRenamed>true</canBeRenamed>
    </base>

    <placement useRandomYRotation="false" useManualYRotation="true" >
        <testAreas>
            <testArea startNode="testArea1Start" endNode="testArea1End" />
            <testArea startNode="testArea2Start" endNode="testArea2End" />
        </testAreas>

        <sounds>
            <place template="smallImp" />
        </sounds>
    </placement>

    <clearAreas>
        <clearArea startNode="clearArea1Start" widthNode="clearArea1Width" heightNode="clearArea1Height"/>
        <clearArea startNode="clearArea2Start" widthNode="clearArea2Width" heightNode="clearArea2Height"/>
    </clearAreas>

    <leveling requireLeveling="true" maxSmoothDistance="10" maxSlope="75" maxEdgeAngle="30" >
        <levelAreas>
            <levelArea startNode="levelArea1Start" widthNode="levelArea1Width" heightNode="levelArea1Height" groundType="asphalt"/>
            <levelArea startNode="levelArea2Start" widthNode="levelArea2Width" heightNode="levelArea2Height" groundType="asphalt"/>
        </levelAreas>
    </leveling>

    <indoorAreas>
        <indoorArea startNode="indoorArea1Start" widthNode="indoorArea1Width" heightNode="indoorArea1Height" />
        <indoorArea startNode="indoorArea2Start" widthNode="indoorArea2Width" heightNode="indoorArea2Height" />
    </indoorAreas>

    <tipOcclusionUpdateAreas>
        <tipOcclusionUpdateArea startNode="tipOcclusionUpdateArea1Start" endNode="tipOcclusionUpdateArea1End" />
    </tipOcclusionUpdateAreas>

    <ai>
        <updateAreas>
            <updateArea startNode="tipOcclusionUpdateArea1Start" endNode="tipOcclusionUpdateArea1End" />
        </updateAreas>
        <splines>
            <spline node="unloadTriggerAISpline" />
        </splines>
    </ai>

    <infoTrigger triggerNode="infoTrigger" />

    <dynamicallyLoadedParts>
        <dynamicallyLoadedPart filename="$data/placeables/lizard/productionPoints/raisinFactory/props.i3d" node="0" linkNode="propsLinkNode" />
    </dynamicallyLoadedParts>

    <lights>
        <group weatherRequiredFlags="NIGHT" />

        <sharedLight filename="$data/shared/assets/lights/terraLed/fluorescentTube50W.xml"          linkNode="linkedLight1" groupIndex="1"/>
        <sharedLight filename="$data/shared/assets/lights/terraLed/fluorescentTube50W.xml"          linkNode="linkedLight2" groupIndex="1"/>
        <sharedLight filename="$data/shared/assets/lights/lizard/buildings/industrialWallLight.xml" linkNode="linkedLight3" groupIndex="1"/>
        <sharedLight filename="$data/shared/assets/lights/lizard/buildings/industrialWallLight.xml" linkNode="linkedLight4" groupIndex="1"/>
        <sharedLight filename="$data/shared/assets/lights/lizard/buildings/industrialWallLight.xml" linkNode="linkedLight5" groupIndex="1"/>
        <sharedLight filename="$data/shared/assets/lights/lizard/buildings/industrialWallLight.xml" linkNode="linkedLight6" groupIndex="1"/>


        <lightShape node="interiorDay" groupIndex="1"/>
        <lightShape node="interiorDayLOD" groupIndex="1"/>

        <realLights>
            <low>
                <light node="realLightsLow" groupIndex="1"/>
            </low>
            <high>
                <light node="realLightsHigh" groupIndex="1"/>
            </high>
        </realLights>
    </lights>


    <hotspots>
        <hotspot type="PRODUCTION_POINT" linkNode="unloadTriggerMarker" teleportNode="unloadTriggerMarker" />
    </hotspots>

    <triggerMarkers>
        <triggerMarker node="warningStripes" />
        <triggerMarker node="playerTriggerMarker" filename="$data/shared/assets/marker/markerIcons.xml" id="WRENCH" adjustToGround="true" />
        <triggerMarker node="unloadTriggerMarker" filename="$data/shared/assets/marker/markerIcons.xml" id="UNLOAD" adjustToGround="true" />
    </triggerMarkers>

    <productionPoint>
        <productions>
            <production id="sunflower_oil" name="$l10n_fillType_sunflowerOil" cyclesPerHour="200" costsPerActiveHour="2.5">
                <inputs>
                    <input fillType="SUNFLOWER" amount="2" />
                </inputs>
                <outputs>
                    <output fillType="SUNFLOWER_OIL" amount="1" />
                </outputs>
            </production>
            <production id="canola_oil" name="$l10n_fillType_canolaOil" cyclesPerHour="200" costsPerActiveHour="2.5">
                <inputs>
                    <input fillType="CANOLA" amount="2" />
                </inputs>
                <outputs>
                    <output fillType="CANOLA_OIL" amount="1" />
                </outputs>
            </production>
            <production id="olive_oil" name="$l10n_fillType_oliveOil" cyclesPerHour="100" costsPerActiveHour="2.5">
                <inputs>
                    <input fillType="OLIVE" amount="2" />
                </inputs>
                <outputs>
                    <output fillType="OLIVE_OIL" amount="1" />
                </outputs>
            </production>
        </productions>

        <storage isExtension="false" fillLevelSyncThreshold="50">
            <capacity fillType="SUNFLOWER"     capacity="144000" />
            <capacity fillType="CANOLA"        capacity="144000" />
            <capacity fillType="OLIVE"         capacity="72000" />
            <capacity fillType="SUNFLOWER_OIL" capacity="10000" />
            <capacity fillType="CANOLA_OIL"    capacity="10000" />
            <capacity fillType="OLIVE_OIL"     capacity="5000" />
        </storage>

        <sellingStation node="sellingStation" supportsExtension="false">
            <unloadTrigger exactFillRootNode="unloadTrigger" aiNode="unloadTriggerAINode" fillTypes="SUNFLOWER CANOLA OLIVE"/>
        </sellingStation>

        <palletSpawner node="palletSpawner">
            <spawnPlaces>
                <spawnPlace startNode="spawnSpace1start" />
            </spawnPlaces>
        </palletSpawner>

        <playerTrigger node="playerTrigger" />

        <sounds>
            <idle template="oilPlantIdle" linkNode="0>" />
            <active template="oilPlantWork" linkNode="0>" />
        </sounds>
    </productionPoint>

        <storage isExtension="false" fillLevelSyncThreshold="50">
            <capacity fillType="SUNFLOWER"     capacity="144000" />
            <capacity fillType="CANOLA"        capacity="144000" />
            <capacity fillType="OLIVE"         capacity="72000" />
            <capacity fillType="SUNFLOWER_OIL" capacity="10000" />
            <capacity fillType="CANOLA_OIL"    capacity="10000" />
            <capacity fillType="OLIVE_OIL"     capacity="5000" />
        </storage>

        <sellingStation node="sellingStation" supportsExtension="false">
            <unloadTrigger exactFillRootNode="unloadTrigger" aiNode="unloadTriggerAINode" fillTypes="GRAPE"/>
        </sellingStation>

        <palletSpawner node="palletSpawner">
            <spawnPlaces>
                <spawnPlace startNode="spawnSpace1start" />
            </spawnPlaces>
        </palletSpawner>

        <playerTrigger node="playerTrigger" />

        <sounds>
            <idle template="oilPlantIdle" linkNode="0>" />
            <active template="oilPlantWork" linkNode="0>" />
        </sounds>
    </productionPoint>

    <i3dMappings>
        <i3dMapping id="interiorDay" node="0>0|0|0|2|0" />
        <i3dMapping id="propsLinkNode" node="0>0|0|1" />
        <i3dMapping id="interiorDayLOD" node="0>0|1|0|3" />
        <i3dMapping id="clearArea1Start" node="0>1|0" />
        <i3dMapping id="clearArea1Width" node="0>1|0|0" />
        <i3dMapping id="clearArea1Height" node="0>1|0|1" />
        <i3dMapping id="clearArea2Start" node="0>1|1" />
        <i3dMapping id="clearArea2Width" node="0>1|1|0" />
        <i3dMapping id="clearArea2Height" node="0>1|1|1" />
        <i3dMapping id="levelArea1Start" node="0>2|0" />
        <i3dMapping id="levelArea1Width" node="0>2|0|0" />
        <i3dMapping id="levelArea1Height" node="0>2|0|1" />
        <i3dMapping id="levelArea2Start" node="0>2|1" />
        <i3dMapping id="levelArea2Width" node="0>2|1|0" />
        <i3dMapping id="levelArea2Height" node="0>2|1|1" />
        <i3dMapping id="indoorArea1Start" node="0>3|0" />
        <i3dMapping id="indoorArea1Width" node="0>3|0|0" />
        <i3dMapping id="indoorArea1Height" node="0>3|0|1" />
        <i3dMapping id="indoorArea2Start" node="0>3|1" />
        <i3dMapping id="indoorArea2Width" node="0>3|1|0" />
        <i3dMapping id="indoorArea2Height" node="0>3|1|1" />
        <i3dMapping id="testArea1Start" node="0>4|0" />
        <i3dMapping id="testArea1End" node="0>4|0|0" />
        <i3dMapping id="testArea2Start" node="0>4|1" />
        <i3dMapping id="testArea2End" node="0>4|1|0" />
        <i3dMapping id="tipOcclusionUpdateArea1Start" node="0>5|0" />
        <i3dMapping id="tipOcclusionUpdateArea1End" node="0>5|0|0" />
        <i3dMapping id="infoTrigger" node="0>6" />
        <i3dMapping id="realLightsLow" node="0>9|0|0" />
        <i3dMapping id="realLightsHigh" node="0>9|0|1" />
        <i3dMapping id="linkedLight1" node="0>9|1|0" />
        <i3dMapping id="linkedLight2" node="0>9|1|1" />
        <i3dMapping id="linkedLight3" node="0>9|1|2" />
        <i3dMapping id="linkedLight4" node="0>9|1|3" />
        <i3dMapping id="linkedLight5" node="0>9|1|4" />
        <i3dMapping id="linkedLight6" node="0>9|1|5" />
        <i3dMapping id="sellingStation" node="0>10" />
        <i3dMapping id="unloadTrigger" node="0>10|0" />
        <i3dMapping id="unloadTriggerMarker" node="0>10|0|0" />
        <i3dMapping id="unloadTriggerAINode" node="0>10|0|1" />
        <i3dMapping id="unloadTriggerAISpline" node="0>10|0|2" />
        <i3dMapping id="playerTrigger" node="0>11|0" />
        <i3dMapping id="playerTriggerMarker" node="0>11|0|0" />
        <i3dMapping id="palletSpawner" node="0>12" />
        <i3dMapping id="spawnSpace1start" node="0>12|0" />
        <i3dMapping id="warningStripes" node="0>13" />
    </i3dMappings>
</placeable>
Joueur FS17 sur PS4 et PC depuis juillet 2018
Joueur FS19 sur PC
"Seasons" ou ce qu'il manquait à FS19 pour m'y faire vraiment jouer
Joueur FS22 sur PC - Haut-Beyl' / Calmsden / Alex Prodeal Farm
FusingGrain
Posts: 692
Joined: Tue Sep 01, 2015 6:32 am

Re: Transformer usine de production du jeu en mod et changer sa production

Post by FusingGrain »

Salut,

Bon j'ai copié la totalité de ton xml dans notepad++

(Par facilité, on peut directement mettre un xml en piece jointe dans un message, de la meme maniere qu'on publie son log)

Ceci dis ligne 2 je ne vois aucune erreur, par contre tu a une grosse erreur dans ton xml, dans la partie storage et sellingStation.

Si tu regarde dans ton xml, ligne 143-168, tu reproduit le meme bloc : ligne 170-195.

Pour la précision ton erreur signale une balise ouverte mais pas fermee: tu a un < mais pas un /> c'est ce que signifie ton erreur.

Maintenant la solution complète:

Ton erreur indique que la balise ouverte n'est pas fermée, si tu clic dans notepad++ si le texte de la ligne 2, la ligne deviens jaune et a gauche tu a un trait rouge qui apparait et suis les carrés des blocs xml donc tu ouvre avec <placeable et tu dois fermer avec </placeables>, mais en suivant le trait rouge dans la colonne de gauche tu verras qu'au lieu de se terminer a la ligne 245, ton trait se termine à la ligne 195 avec </productionPoint>

Cela signifie simplement que ta ligne 195 a une balise de fermeture, mais tu n'en a pas pour l'ouverture.

Par exemple si tu clic sur la ligne 115 (productionPoint) tu verra que la cloture se fait a la ligne 168 (trait rouge) mais en plus texte en mauve..

Donc ton erreur signalée ligne 2 ne se trouve pas a la ligne 2 mais de la ligne 170 à 195 incluse dans ton xml.

Comme quoi si fier au log c'est bien mais l'erreur ne se trouve pas forcément ou il le dis mais bel et bien entre la balise d'ouverture ligne 2 et sa balise de fermeture..

D'ou l'utilité d'utiliser notepad++ et de poster le xml complet comme je t'ai demandé et aussi de comprendre l'aide apportée par notepad++ ( Attention je ne critique pas sur ce point).

C'est pour cette raison que je t'explique en détail comment rechercher avec notepad++ les erreurs.

Normalement avec cette correction ton usine devrais fonctionner maintenant.

Bonne journée,

FusingGrain
Greg78
Posts: 611
Joined: Sat Jun 24, 2017 9:09 am
Location: somewhere where you're not

Re: Transformer usine de production du jeu en mod et changer sa production

Post by Greg78 »

Hello FusingGrain, et MERCI pour tes explications.

Effectivement, quel c** je n'avais pas vu ces lignes en doublon :blushnew:

Doublon effacé, et effectivement, mon usine apparait bien dispo à l'achat dans le mode construction.
Restera à l'installer et la tester (et modifier les noms pour être "raccord" avec ce que je veux faire, ça fera moins bricolage).

J'essaierais d'être plus vigilant sur mes prochaines tentatives (je me doutais que c'était vraiment une erreur du genre très couillon...)
Joueur FS17 sur PS4 et PC depuis juillet 2018
Joueur FS19 sur PC
"Seasons" ou ce qu'il manquait à FS19 pour m'y faire vraiment jouer
Joueur FS22 sur PC - Haut-Beyl' / Calmsden / Alex Prodeal Farm
FusingGrain
Posts: 692
Joined: Tue Sep 01, 2015 6:32 am

Re: Transformer usine de production du jeu en mod et changer sa production

Post by FusingGrain »

Salut,

Content que ca fonctionne pour ton mod *thumbsup* *thumbsup* *thumbsup*

FusingGrain
User avatar
JMGaming_
Posts: 468
Joined: Sat Apr 15, 2017 12:00 am
Location: France , Grand Est

Re: Transformer usine de production du jeu en mod et changer sa production

Post by JMGaming_ »

Salut,

Super pour ta modification !
Si tu fais beaucoup de xml il faut passer sur des outils de développement comme eclipse. Il te validera ton xsd en plus de la syntaxe de base du xml.

Bon courage.
Post Reply