Créer et modifier des mods

*Cet article est une ébauche. Vous pouvez aider 7 Days to Die Wiki en ajoutant à l'article.*

## Introduction

Les mods permettent de modifier les fichiers Vanilla du jeu afin de changer certains aspects de ce dernier. Dans 7 Days To Die, les mods se présentent sous forme de **Modlets**, c'est à dire un ensemble de fichiers qui, grâce à un système nommé **xpath**, vont modifier les fichiers du jeu lors du lancement d'une partie. Les modifications ne sont donc pas directement dans les fichiers Vanilla, mais de manière extérieure via d'autres fichiers.

Le langage de programmation pour les mods de 7 Days To Die est le langage XML, similaire à l'HTML. Sa compréhension est relativement simple comparé à d'autres langage ce qui rend la création de mods bien plus aisée.

Dans cet article, le but sera de vous apprendre les bases afin de modifier des mods que vous avez téléchargé mais aussi de créer les vôtres.

## Les bases

Tout d'abord, il vous faudra créer un dossier "Mods" dans la racine du jeu (Steam: *C:\Program Files (x86)\Steam\steamapps\common\7 Days To Die*). N'hésitez pas à vous créer un raccourci vers ce chemin-ci car vous allez y retourner souvent.

Une fois cela fait, téléchargez le fichier juste ici et insérez-le dans le dossier Mods fraichement créé. Ce sont ces fichiers qui vous permettront de réaliser vos premiers mods.

Pour la suite, vous aurez besoin de pouvoir examiner les fichiers Vanilla situé au chemin suivant : C:\Program Files (x86)\Steam\steamapps\common\7 Days To Die\Data\Config

Il est aussi **fortement conseillé** de télécharger **Notepad++** ou **Visual Studio Code** afin de pouvoir ouvrir les différents fichiers XML que vous allez créer mais aussi ceux Vanilla. Notepad++ est plus simple à utiliser et l'interface plus agréable, c'est donc plutôt vers ce logiciel que vous devrez vous tourner en premier lieu. L'installation du pluggin "XML Tools" est aussi vivement recommandée.

## Présentation du Modlet

Le Modlet que vous avez téléchargé contient plusieurs dossiers/fichiers. Ces derniers sont :

### Config

Il s'agit du lieu où toutes nos modifications vont se faire, c'est le **coeur** du mod. C'est ici que vous retrouverez tous les fichiers XML qui vous serviront pour la création de mods.

A l'intérieur de ce dossier, on retrouve 8 fichiers, chacun de ces fichiers possède le **même nom** que le fichier Vanilla qui sera modifié. (exemple: le fichier Items.XML modifiera le fichier Vanilla du même nom)

### UIAtlases

Il s'agit d'une sorte de **banque d'image** qui pourront être ensuite exploitées dans le jeu

### ModInfo

Il regroupe les informations principales sur votre mod et détermine aussi le nom que le jeu donnera à votre mod lorsqu'il le chargera dans la Console. Donner un nom clair à votre mod vous permettra d'identifier plus facilement les différentes erreurs commises lors du Débogage

## Compréhension d'un fichier XML

### Structure

Ci-dessous se trouve un exemple d'une partie de XML tirée du fichier "items.xml" (chemin: *C:\Program Files (x86)\Steam\steamapps\common\7 Days To Die\Config\items*)

```
**<items>**
     **<item** *name*="resourceWood"**>**
         **<property** *name*="EconomicalValue" *value*="500"**/>**
         **<property** *name*="SellableToTrader" *value*="True"**/>**
     **</item>**
**</items>**

```

Tout d'abord, sachez qu'un fichier XML se lit de manière classique, c'est à dire de haut en bas et de gauche à droite. Ils fonctionnent d'une façon relativement similaire à des dossiers sur Windows, il s'agit d'un système de "parent-enfant". De manière générale, les lignes les plus à gauche définissent des caractères très globaux et plus les lignes se trouvent à droite, plus les caractères deviennent précis.

Ici par exemple, cette ligne correspond à une **liste d'Items** qui comporte **1 seul Item** qui a pour nom "resourceWood" (le bois) qui à **2 Propriétés** : la Valeur économique (500 Dukes) et le fait qu'il soit ou non vendable au trader (ici, il peut être vendu)

Chaque ligne peut comporter :

* Un **Element** (en Gras)
* Un ou plusieurs **Attributs** (en Italique)
* Une **Valeur** par Attribut (le reste)

### Les Elements

Chaque Element commence par un "opening tag" et finit par un "closing tag".

Il existe deux manières d'écrire un Element :

```
<item ... />

```

Cette façon d'écrire est utilisée lorsqu'un Element ne contient pas d'autres Elements. Il commence par un opening tag **<** et finit par un closing tag **/>**

```
<items>
     <item .../>
</items>

```

Cette façon d'écrire est utilisée lorsqu'un Element contient d'autres Elements. Il commence par un opening tag **<...>** et finit par un closing tag **</...>**

Ici, l'Element "items" contient l'Element "item". Comme l'Element "item" ne contient aucun autre Element, l'Element commence par un openning tag (<) et finit par un closing tag (/>)

### Les Attributs

Les Attributs (ou Attributes en anglais) se trouvent à l'intérieur des Eléments. Ils servent à définir des caractéristiques de ces derniers. Chaque Attribut fonctionne de pair avec une Valeur.

```
Exemple: <item name="resourceWood"/>

```

Ici, on retrouve donc:

* 1 Element = item
* 1 Attribut = name
* 1 Valeur d'Attribut = resourceWood

### Les Valeurs

Les Valeurs (ou Value en anglais) sont, comme leu nom l'indique, une valeur donnée à un Attribut. Elle peut avoir énormément de formes, cela peut être un **valeur numéraire**, une valeur dites **"Boolean"**, c'est à dire "vrai ou faux" ou cela peut être un **ensemble de mots**.

```
Exemples: <item name="resourceWood"/>
               <property name="EconomicalValue" value="500"/>
               <property name="SellableToTrader" value="true"/>
          </item>

```

Ici, on retrouve donc:

* 3 Valeurs de l'Attribut "name"
* 1 Valeur numéraire de l'Attribut "value"
* 1 Valeur Boolean de l'Attribut "value"

Toutes ces appellations peuvent sembler peu intéressantes de prime abord mais elles vous serviront énormément à comprendre la suite et seront primordiale lors des phases de Débogage.

### Exemples

Cet exemple est tiré du fichier "recipes.xml", il s'agit du fichier qui régit les crafts du jeu et déterminent quels crafts sont disponibles, dans quel établi ils doivent être faits et quelles ressources sont nécessaires pour les réaliser. Prenez votre temps et essayez de comprendre ce que veut dire cette partie de code.

```
<recipes>
    <recipe name="vehicleMinibikePlaceable" count="1" craft_time="90" craft_area="workbench">
         <ingredient name="vehicleWheels" count="2"/>
         <ingredient name="vehicleMinibikeChassis" count="1"/>
         <ingredient name="vehicleMinibikeHandlebars" count="1"/>
         <ingredient name="smallEngine" count="1"/>
         <ingredient name="carBattery" count="1"/>
    </recipe>
</recipes>

```

Cette partie de code signifie que parmi l'ensemble de tout les crafts du jeu (*<recipes>*), le craft d'une Mini-Moto (*name="vehicleMinibikePlaceable" count="1"*) prend 90 secondes (*craft\_time="90"*). Ce craft se fait uniquement dans l'Etabli (*craft\_area="workbench"*) et nécessite 2 roues, 1 chassis de mini-moto, 1 guidon de mini-moto, un moteur et une batterie.

Autre exemple:

```
<recipes>
     <recipe name="foodEggBoiled" count="1" craft_area="campfire" craft_tool="toolCookingPot">
          <ingredient name="foodEgg" count="1"/>
          <ingredient name="drinkJarBoiledWater" count="1"/>
     </recipe>

```

```
     <recipe name="foodFishTacos" count="1" craft_area="campfire" craft_tool="toolCookingGrill">
          <ingredient name="foodCanSalmon" count="1"/>
          <ingredient name="foodCornMeal" count="2"/>
     </recipe>
</recipes>

```

Cette partie de code signifie que parmi l'ensemble de tout les crafts du jeu (<recipes>), on trouve:

* Le craft d'un œuf bouilli (*name="foodEggBoiled" count="1"*) qui se fait uniquement dans le Feu de Camp (*craft\_area="campfire"*) avec une Marmite (*craft\_tool="toolCookingPot"*). Cela nécessite 1 oeuf et une eau bouillie.

* Le craft du Tacos au Poisson (*name="foodFishTacos" count="1"*) qui se fait uniquement dans le Feu de Camp (*craft\_area="campfire"*) avec un Grill (*craft\_tool="toolCookingGrill"*). Cela nécessite une conserve de Saumon et deux Farine de Maïs

Une fois que vous comprendrez facilement cela, vous pourrez presque commencer à créer quelques mods. Il ne vous manquera plus qu'une seule étape: