docs: Sphinx manuel joueur/admin/dev + build HTML

Manuel complet DauphinCraft v0.1.0 : 14 pages RST (joueur, admin,
dev, annexes), conf.py rtd-theme, Makefile/make.bat, build HTML propre.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Floppyrj45
2026-04-19 17:57:47 +02:00
parent 9429360966
commit cafdb7d27e
128 changed files with 14093 additions and 0 deletions

13
docs/Makefile Normal file
View File

@@ -0,0 +1,13 @@
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
html:
@$(SPHINXBUILD) -b html "$(SOURCEDIR)" "$(BUILDDIR)/html" $(SPHINXOPTS)
clean:
rm -rf "$(BUILDDIR)"

4
docs/_build/html/.buildinfo vendored Normal file
View File

@@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 10c9fd9df181d489619580d50a87f81e
tags: 645f666f9bcd5a90fca523b33c5a78b7

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/_build/html/.doctrees/index.doctree vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,79 @@
Configuration du serveur
========================
Fichier de service systemd
---------------------------
Le service est défini dans :
.. code-block:: text
/etc/systemd/system/dauphincraft.service
Contenu type :
.. code-block:: ini
[Unit]
Description=DauphinCraft Game Server
After=network.target
[Service]
User=dauphincraft
WorkingDirectory=/opt/dauphincraft
ExecStart=/opt/dauphincraft/DauphinCraft.x86_64 --headless --port 7777
Restart=on-failure
RestartSec=5s
StandardOutput=append:/var/log/dauphincraft.log
StandardError=append:/var/log/dauphincraft.log
[Install]
WantedBy=multi-user.target
Modifier le port d'écoute
--------------------------
1. Éditez le fichier service :
.. code-block:: bash
sudo nano /etc/systemd/system/dauphincraft.service
2. Modifiez la ligne ``ExecStart`` pour changer le port :
.. code-block:: text
ExecStart=/opt/dauphincraft/DauphinCraft.x86_64 --headless --port 9999
3. Rechargez la configuration et redémarrez le service :
.. code-block:: bash
sudo systemctl daemon-reload
sudo systemctl restart dauphincraft
4. N'oubliez pas d'ouvrir le nouveau port dans le pare-feu (voir :doc:`installation_serveur`).
Nombre maximum de joueurs
--------------------------
La limite de joueurs est définie à **16** par défaut dans le code source
(``scripts/net/NetworkManager.gd``). Cette valeur sera exposée en paramètre
de ligne de commande dans une version future.
Pour modifier temporairement la limite, il est actuellement nécessaire de recompiler
le projet avec la valeur souhaitée.
.. note::
Une option ``--max-players <N>`` sera ajoutée dans la version 0.2.0.
Sauvegarde du monde
-------------------
.. warning::
La sauvegarde persistante du monde n'est pas encore implémentée dans la version 0.1.0.
Le monde est régénéré à chaque redémarrage du serveur.
Cette fonctionnalité est prévue pour une version future.

View File

@@ -0,0 +1,96 @@
Installation du serveur
=======================
Ce guide décrit l'installation du serveur dédié DauphinCraft sur une machine Linux.
Prérequis
---------
+--------------------+-----------------------------------------------+
| Composant | Requis |
+====================+===============================================+
| Système | Debian 11+ ou Ubuntu 22.04 LTS (64 bits) |
+--------------------+-----------------------------------------------+
| RAM | 1 Go minimum |
+--------------------+-----------------------------------------------+
| Stockage | 500 Mo libres |
+--------------------+-----------------------------------------------+
| Réseau | IP publique ou réseau local avec NAT |
+--------------------+-----------------------------------------------+
| Port | UDP 7777 ouvert en entrée |
+--------------------+-----------------------------------------------+
| Droits | Accès root ou sudo |
+--------------------+-----------------------------------------------+
Extraction de l'archive
-----------------------
Téléchargez l'archive serveur depuis le dépôt officiel :
.. code-block:: bash
wget http://<gitea-host>/dauphincraft/releases/download/v0.1.0/DauphinCraft-Server-v0.1.tar.gz
Extrayez-la dans ``/opt`` :
.. code-block:: bash
sudo tar -xzf DauphinCraft-Server-v0.1.tar.gz -C /opt/
sudo mv /opt/DauphinCraft-Server /opt/dauphincraft
Installation
------------
Lancez le script d'installation fourni en tant que root :
.. code-block:: bash
cd /opt/dauphincraft
sudo bash install.sh
Ce script :
1. Crée un utilisateur système ``dauphincraft``.
2. Installe le fichier de service systemd dans ``/etc/systemd/system/dauphincraft.service``.
3. Active et démarre le service automatiquement.
Vérification du service
-----------------------
.. code-block:: bash
systemctl status dauphincraft
Une sortie de type ``Active: active (running)`` confirme que le serveur tourne correctement.
Ouverture du port pare-feu
---------------------------
Avec **ufw** (Ubuntu) :
.. code-block:: bash
sudo ufw allow 7777/udp
sudo ufw reload
Avec **iptables** :
.. code-block:: bash
sudo iptables -A INPUT -p udp --dport 7777 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
Consultation des logs
---------------------
Via **journalctl** (en temps réel) :
.. code-block:: bash
journalctl -u dauphincraft -f
Via le fichier de log :
.. code-block:: bash
tail -f /var/log/dauphincraft.log

View File

@@ -0,0 +1,96 @@
Maintenance du serveur
======================
Mise à jour du serveur
----------------------
Pour mettre à jour DauphinCraft vers une nouvelle version :
1. Téléchargez le nouveau tarball depuis le dépôt officiel :
.. code-block:: bash
wget http://<gitea-host>/dauphincraft/releases/download/vX.Y.Z/DauphinCraft-Server-vX.Y.Z.tar.gz
2. Arrêtez le service :
.. code-block:: bash
sudo systemctl stop dauphincraft
3. Sauvegardez l'ancienne version (optionnel mais recommandé) :
.. code-block:: bash
sudo cp -r /opt/dauphincraft /opt/dauphincraft.bak
4. Extrayez la nouvelle version :
.. code-block:: bash
sudo tar -xzf DauphinCraft-Server-vX.Y.Z.tar.gz -C /opt/
sudo rsync -a --exclude='logs' /opt/DauphinCraft-Server/ /opt/dauphincraft/
5. Relancez le service :
.. code-block:: bash
sudo systemctl start dauphincraft
systemctl status dauphincraft
Surveillance et logs
---------------------
**Consultation des logs en direct :**
.. code-block:: bash
journalctl -u dauphincraft -f
**Consultation des dernières lignes :**
.. code-block:: bash
tail -n 100 /var/log/dauphincraft.log
**Rotation des logs :** le service redirige stdout/stderr vers ``/var/log/dauphincraft.log``.
Pour éviter que ce fichier grossisse indéfiniment, configurez ``logrotate`` :
.. code-block:: bash
sudo nano /etc/logrotate.d/dauphincraft
Contenu suggéré :
.. code-block:: text
/var/log/dauphincraft.log {
daily
rotate 7
compress
missingok
notifempty
}
Vérification de l'état du serveur
-----------------------------------
.. code-block:: bash
systemctl is-active dauphincraft
Retourne ``active`` si le serveur est opérationnel, ``failed`` sinon.
Redémarrage automatique
------------------------
Le fichier de service inclut ``Restart=on-failure`` avec un délai de 5 secondes.
Le serveur redémarre donc automatiquement en cas de crash.
Gestion des joueurs (Kick / Ban)
----------------------------------
.. note::
Les commandes d'administration en jeu (kick, ban) sont prévues pour la version 0.2.0.
Aucune interface d'administration n'est disponible dans la version actuelle.

View File

@@ -0,0 +1,60 @@
Historique des versions
=======================
Version 0.1.0 — Sortie initiale
---------------------------------
*Avril 2026*
Première version publique de DauphinCraft. Cette version pose les bases du jeu :
monde voxel procédural, gameplay dauphin, inventaire, mobs et multijoueur.
Nouvelles fonctionnalités
~~~~~~~~~~~~~~~~~~~~~~~~~
- **Monde voxel procédural sous-marin**
- Génération par bruit de Perlin multi-octave.
- Quatre biomes : récif corallien, forêt de kelp, abysses, épaves.
- Chunks 16×16×16 chargés dynamiquement autour du joueur.
- Six types de blocs : Corail Bleu, Corail Rouge, Kelp, Roche, Épave, Glace.
- **Dauphin contrôleur et HUD**
- Déplacement 6DOF (haut/bas/avant/arrière/strafes).
- Jauges : oxygène, vie, faim.
- Boost de nage et écholocation (révèle l'environnement dans un rayon de 20 unités).
- Hotbar de 9 slots.
- **Inventaire et crafting**
- Inventaire de 27 slots.
- 5 recettes de craft : Lampe bio, Harpon, Bulle d'air, Algue cuisinée, Armure écailles.
- **Mobs (3 types)**
- Bancs de poissons (boids, neutres).
- Méduses (dégâts de contact passifs).
- Requin (hostile, réagit à l'écholocation).
- Spawner par biome avec limite de population.
- **Multijoueur ENet 16 joueurs**
- Architecture autorité serveur.
- Synchronisation position, blocs, inventaire.
- Chat textuel en jeu.
- Serveur dédié headless pour Linux.
- **Ambiance visuelle et audio**
- Shaders sous-marins : fog volumétrique, diffusion lumineuse.
- Particules de plancton lumineux.
- Musique : *Underwater Theme* (Cleyton RX, CC-BY 3.0).
- Effets sonores : ambiance, bulles, chant de baleine (CC0).
Limitations connues
~~~~~~~~~~~~~~~~~~~
- La sauvegarde du monde n'est pas persistante (monde régénéré à chaque redémarrage).
- Pas de commandes d'administration en jeu (kick/ban prévu en 0.2.0).
- La limite de joueurs (16) n'est pas configurable en ligne de commande.

View File

@@ -0,0 +1,50 @@
Crédits
=======
Moteur
------
- **Godot Engine 4.6.2** — Licence MIT — https://godotengine.org
Assets
------
Tous les assets sont listés ci-dessous avec leur source et licence.
+-----------------------------------+-------------------------------------------------------+-------------+
| Asset | Source | Licence |
+===================================+=======================================================+=============+
| ``icon.svg`` | Créé manuellement | CC0 |
+-----------------------------------+-------------------------------------------------------+-------------+
| ``audio/music/underwater_theme`` | Cleyton RX — https://opengameart.org/content/ | CC-BY 3.0 |
| | underwater-theme | |
+-----------------------------------+-------------------------------------------------------+-------------+
| ``audio/sfx/underwater_ambient`` | Zozzy — https://freesound.org/people/Zozzy/ | CC0 |
| | sounds/56678/ | |
+-----------------------------------+-------------------------------------------------------+-------------+
| ``audio/sfx/bubbles`` | ristooooo1 — https://freesound.org/people/ | CC0 |
| | ristooooo1/sounds/539823/ | |
+-----------------------------------+-------------------------------------------------------+-------------+
| ``audio/sfx/whale_call`` | taure — https://freesound.org/people/taure/ | CC0 |
| | sounds/361423/ | |
+-----------------------------------+-------------------------------------------------------+-------------+
Attribution requise
-------------------
Conformément à la licence CC-BY 3.0, la musique de fond doit être créditée ainsi :
*"Underwater Theme" par Cleyton RX,*
*https://opengameart.org/content/underwater-theme,*
*sous licence Creative Commons Attribution 3.0.*
Auteur du jeu
-------------
- **Baptiste Moulin** — Conception, développement, direction artistique
Remerciements
-------------
- La communauté Godot Engine pour ses ressources et son support.
- Les créateurs d'assets CC0 et CC-BY qui rendent les projets open source possibles.

View File

@@ -0,0 +1,81 @@
Architecture technique
=======================
Moteur et langage
-----------------
+------------------+-----------------------------------------------+
| Composant | Valeur |
+==================+===============================================+
| Moteur | Godot Engine 4.6.2 (Forward+) |
+------------------+-----------------------------------------------+
| Langage | GDScript (typage strict) |
+------------------+-----------------------------------------------+
| Rendu | Vulkan (Forward+) / Compatibility (fallback) |
+------------------+-----------------------------------------------+
| Réseau | ENet UDP, autorité serveur |
+------------------+-----------------------------------------------+
Architecture réseau
-------------------
DauphinCraft utilise un modèle **autorité serveur** :
- Le serveur est la source de vérité pour les positions, les blocs et les inventaires.
- Les clients envoient leurs intentions (déplacement, action) et reçoivent l'état du monde.
- La synchronisation est assurée par ``PlayerSyncComponent`` et ``WorldSyncComponent``.
- Le protocole de transport est **ENet (UDP)** via la couche haut niveau Godot (``MultiplayerAPI``).
- Port par défaut : **UDP 7777**.
Structure du projet
-------------------
.. code-block:: text
DauphinCraft/
├── project.godot # Fichier de projet Godot
├── icon.svg # Icône du jeu
├── export_presets.cfg # Présets d'export (Windows, Linux serveur)
├── assets/ # Ressources visuelles (textures, modèles)
├── audio/ # Fichiers audio
│ ├── music/ # Musiques de fond
│ └── sfx/ # Effets sonores
├── builds/ # Sorties d'export
├── scenes/ # Scènes Godot (.tscn)
│ ├── Main.tscn
│ ├── MainMenu.tscn
│ ├── LobbyMenu.tscn
│ ├── World.tscn
│ ├── Dolphin.tscn
│ ├── InventoryUI.tscn
│ ├── PauseMenu.tscn
│ └── mobs/
├── scripts/ # Scripts GDScript (.gd)
│ ├── Main.gd
│ ├── PauseMenu.gd
│ ├── world/ # Gestion du monde voxel
│ ├── dolphin/ # Contrôleur joueur + HUD
│ ├── ambience/ # Environnement visuel et audio
│ ├── inventory/ # Inventaire et crafting
│ ├── mobs/ # Intelligence artificielle des mobs
│ └── net/ # Réseau multijoueur
├── shaders/ # Shaders GLSL/Godot
└── docs/ # Documentation Sphinx (ce manuel)
Flux de démarrage
-----------------
1. ``Main.tscn`` est la scène principale. Elle instancie ``MainMenu.tscn``.
2. Le joueur choisit Solo / Héberger / Rejoindre dans ``LobbyMenu.tscn``.
3. ``NetworkManager`` initialise ENet (serveur ou client).
4. ``World.tscn`` est chargée : ``ChunkManager`` génère les premiers chunks.
5. ``Dolphin.tscn`` est instanciée pour chaque joueur connecté.
6. La boucle de jeu tourne : physique, synchronisation réseau, rendu.
Présets d'export
----------------
Deux présets sont configurés dans ``export_presets.cfg`` :
- **Windows (64 bits)** : exécutable joueur pour Windows.
- **Linux Server (64 bits)** : exécutable headless pour serveur dédié Linux.

View File

@@ -0,0 +1,110 @@
Contribuer au projet
====================
Outils nécessaires
------------------
- **Godot Engine 4.6.2** : téléchargez depuis https://godotengine.org/download
- **Git** : version 2.x ou supérieure
- Accès au dépôt Gitea de DauphinCraft
Cloner le dépôt
---------------
.. code-block:: bash
git clone http://<gitea-host>/dauphincraft/dauphincraft.git
cd dauphincraft
.. note::
Remplacez ``<gitea-host>`` par l'adresse du serveur Gitea communautaire.
Ouvrir le projet dans Godot
-----------------------------
1. Lancez Godot Engine 4.6.2.
2. Dans le gestionnaire de projets, cliquez sur **Import**.
3. Naviguez jusqu'au dossier cloné et sélectionnez ``project.godot``.
4. Cliquez sur **Import & Edit**.
Le projet s'ouvre directement dans l'éditeur. Appuyez sur **F5** pour lancer le jeu en mode éditeur.
Build et export
---------------
Les présets d'export sont configurés dans ``export_presets.cfg``.
**Exporter pour Windows :**
1. Menu **Projet → Exporter**.
2. Sélectionnez le préset **Windows Desktop**.
3. Cliquez sur **Exporter le projet** et choisissez un dossier de sortie.
**Exporter le serveur Linux :**
1. Menu **Projet → Exporter**.
2. Sélectionnez le préset **Linux Server**.
3. Cliquez sur **Exporter le projet**.
.. note::
Pour exporter vers Linux, vous devez avoir installé le template d'export Linux dans Godot
(**Éditeur → Gérer les modèles d'exportation**).
Style de code
-------------
- **Typage strict** : déclarez toujours les types explicitement (``var x: int = 0``).
- **Pas de TODO** laissé dans le code soumis — ouvrez une issue à la place.
- **Nommage** : ``snake_case`` pour les variables et fonctions, ``PascalCase`` pour les classes.
- **Commentaires** : en français, concis.
- **Signals** : préfixez les signaux avec le nom du composant (``dolphin_died``, ``chunk_loaded``).
Exemple de code conforme :
.. code-block:: gdscript
class_name DolphinController
extends CharacterBody3D
@export var speed: float = 5.0
var _oxygen: float = 1.0
func take_damage(amount: int) -> void:
# Réduit les PV et déclenche le signal si mort
health -= amount
if health <= 0:
emit_signal("dolphin_died")
Soumettre une contribution
---------------------------
1. Créez une branche depuis ``main`` :
.. code-block:: bash
git checkout -b feat/ma-fonctionnalite
2. Faites vos modifications et committez :
.. code-block:: bash
git add .
git commit -m "feat: description courte"
3. Poussez votre branche :
.. code-block:: bash
git push origin feat/ma-fonctionnalite
4. Ouvrez une **Pull Request** sur le Gitea de DauphinCraft.
5. Un mainteneur relit et fusionne après validation.
Discussion et support
----------------------
Rejoignez le serveur Discord communautaire et consultez le canal **#dauphincraft-dev**
pour poser vos questions, proposer des idées ou signaler des bugs.

View File

@@ -0,0 +1,129 @@
Modules du jeu
==============
Le code source est organisé en six modules dans ``scripts/``.
Module Monde (``world/``)
--------------------------
Responsable de la génération et de la gestion du monde voxel sous-marin.
**BlockDatabase.gd**
Registre central de tous les types de blocs (id, nom, texture, propriétés physiques).
API publique : ``get_block(id: int) -> BlockData``, ``get_id_by_name(name: String) -> int``.
**Chunk.gd**
Représente un chunk 16×16×16 blocs. Gère son maillage 3D et son état de chargement.
API publique : ``set_block(x, y, z, id)``, ``get_block(x, y, z) -> int``, ``rebuild_mesh()``.
**ChunkManager.gd**
Orchestre le chargement/déchargement des chunks autour du joueur (rayon configurable).
API publique : ``get_chunk(cx, cy, cz) -> Chunk``, ``request_chunk(pos: Vector3i)``.
**WorldGenerator.gd**
Génère le contenu des chunks de façon procédurale (bruit de Perlin, biomes, structures).
API publique : ``generate_chunk(cx, cy, cz) -> Array`` (tableau de 4096 block ids).
Module Dauphin (``dolphin/``)
------------------------------
Contrôle du personnage joueur et interface utilisateur associée.
**DolphinController.gd**
Gère les entrées clavier/souris, applique la physique de nage, envoie les actions au serveur.
API publique : ``apply_input(input: Dictionary)``, ``take_damage(amount: int)``.
**HUD.gd**
Affiche les jauges (oxygène, vie, faim), la hotbar et les notifications.
API publique : ``update_oxygen(value: float)``, ``update_health(value: float)``,
``update_hunger(value: float)``.
**EcholocationPulse.gd**
Crée et anime l'impulsion sphérique d'écholocation. Détecte les mobs et blocs dans le rayon.
API publique : ``emit_pulse(origin: Vector3, radius: float)``.
Module Ambiance (``ambience/``)
--------------------------------
Environnement visuel et sonore sous-marin.
**UnderwaterEnvironment.gd**
Configure le fog volumétrique, la lumière directionnelle atténuée et les effets de post-process
selon la profondeur du joueur. API publique : ``set_depth(depth: float)``.
**AudioManager.gd**
Singleton audio. Gère les pistes de musique et les effets sonores avec transitions douces.
API publique : ``play_sfx(name: String)``, ``play_music(name: String)``, ``stop_music()``.
**PlanktonParticles.gd**
Système de particules generant le plancton lumineux ambiant.
API publique : ``set_density(density: float)``.
**MainMenu.gd**
Logique du menu principal (navigation, transitions de scène).
Module Inventaire (``inventory/``)
-----------------------------------
Gestion des ressources, recettes et interface d'inventaire.
**Inventory.gd**
Stockage des items du joueur (tableau de slots). Synchronisé avec le serveur en multijoueur.
API publique : ``add_item(id: int, qty: int) -> bool``, ``remove_item(id: int, qty: int) -> bool``,
``has_item(id: int, qty: int) -> bool``.
**ItemDatabase.gd**
Registre de tous les items (id, nom, icône, stack max).
API publique : ``get_item(id: int) -> ItemData``.
**CraftingRecipes.gd**
Définit les 5 recettes de craft et expose la logique de fabrication.
API publique : ``get_available_recipes(inventory: Inventory) -> Array``,
``craft(recipe_id: int, inventory: Inventory) -> bool``.
**InventoryUI.gd**
Interface graphique de l'inventaire et du panneau de crafting.
API publique : ``open()``, ``close()``, ``refresh()``.
Module Mobs (``mobs/``)
------------------------
Intelligence artificielle des créatures marines.
**FishSchool.gd**
Comportement de banc de poissons (alignment, cohesion, separation — boids simplifié).
Fuit le joueur à proximité. API publique : ``set_school_size(n: int)``.
**Jellyfish.gd**
Déplacement oscillant aléatoire. Inflige des dégâts de contact au joueur.
API publique : ``get_damage() -> int``.
**Shark.gd**
IA hostile : détection du joueur, poursuite, attaque, réaction à l'écholocation (fuite).
API publique : ``stun(duration: float)``.
**MobSpawner.gd**
Gère l'apparition des mobs selon le biome et la profondeur, avec limite de population.
API publique : ``spawn_in_chunk(chunk_pos: Vector3i)``.
Module Réseau (``net/``)
-------------------------
Infrastructure multijoueur ENet.
**NetworkManager.gd**
Singleton réseau. Initialise ENet, gère les connexions/déconnexions joueurs, expose les RPCs.
API publique : ``host_game(port: int)``, ``join_game(ip: String, port: int)``,
``disconnect()``.
**PlayerSyncComponent.gd**
Attaché à chaque ``Dolphin``. Synchronise position, rotation et état sur le réseau.
API publique : ``sync_state(state: Dictionary)``.
**WorldSyncComponent.gd**
Synchronise les modifications de blocs entre serveur et clients.
API publique : ``broadcast_block_change(pos: Vector3i, block_id: int)``.
**ChatManager.gd**
Gère l'envoi et la réception des messages de chat en multijoueur.
API publique : ``send_message(text: String)``, ``on_message_received(sender: String, text: String)``.

40
docs/_build/html/_sources/index.rst.txt vendored Normal file
View File

@@ -0,0 +1,40 @@
DauphinCraft — Documentation
============================
Bienvenue dans **DauphinCraft**, un jeu voxel sous-marin multijoueur où vous incarnez un dauphin.
Explorez les fonds marins, construisez des structures, craftez des outils et jouez avec vos amis
jusqu'à 16 joueurs simultanés.
.. toctree::
:maxdepth: 2
:caption: Joueur
joueur/installation
joueur/controles
joueur/mecaniques
joueur/craft
joueur/multijoueur
.. toctree::
:maxdepth: 2
:caption: Administrateur serveur
admin/installation_serveur
admin/configuration
admin/maintenance
.. toctree::
:maxdepth: 2
:caption: Développement
dev/architecture
dev/modules
dev/contribuer
.. toctree::
:maxdepth: 1
:caption: Annexes
credits
changelog

View File

@@ -0,0 +1,86 @@
Contrôles
=========
Toutes les touches sont configurables dans les paramètres du jeu (**Échap → Paramètres → Touches**).
Voici la configuration par défaut.
Déplacement
-----------
+---------------------+------------------+
| Action | Touche par défaut|
+=====================+==================+
| Nager en avant | W |
+---------------------+------------------+
| Reculer | S |
+---------------------+------------------+
| Strafe gauche | A |
+---------------------+------------------+
| Strafe droit | D |
+---------------------+------------------+
| Monter | Espace |
+---------------------+------------------+
| Descendre | Shift |
+---------------------+------------------+
| Boost de nage | Ctrl |
+---------------------+------------------+
.. note::
Le **boost** consomme de l'énergie (jauge bleue en bas à droite du HUD). Il se recharge
automatiquement au repos.
Capacités spéciales
-------------------
+-----------------------------+------------------+
| Action | Touche par défaut|
+=============================+==================+
| Écholocation | E |
+-----------------------------+------------------+
| Activer / Désactiver la HUD | H |
+-----------------------------+------------------+
L'**écholocation** envoie une impulsion sonore qui révèle les blocs et mobs environnants
dans un rayon de 20 unités, même dans les zones sombres.
Interaction avec le monde
--------------------------
+----------------------------+------------------+
| Action | Touche par défaut|
+============================+==================+
| Casser un bloc | Clic gauche |
+----------------------------+------------------+
| Poser un bloc | Clic droit |
+----------------------------+------------------+
| Changer de slot (hotbar) | Molette souris |
+----------------------------+------------------+
| Ouvrir l'inventaire | Tab |
+----------------------------+------------------+
Interface
---------
+----------------------------+------------------+
| Action | Touche par défaut|
+============================+==================+
| Ouvrir le chat | F2 |
+----------------------------+------------------+
| Menu pause | Échap |
+----------------------------+------------------+
Chat
----
En multijoueur, appuyez sur **F2** pour ouvrir la fenêtre de chat. Tapez votre message et
validez avec **Entrée**. Appuyez sur **Échap** pour fermer le chat sans envoyer.
Menu pause
----------
Appuyez sur **Échap** pour mettre le jeu en pause. Le menu propose :
- **Reprendre** : retour au jeu.
- **Paramètres** : audio, vidéo, contrôles.
- **Quitter** : retour au menu principal.

View File

@@ -0,0 +1,112 @@
Crafting — Recettes
===================
Le système de crafting permet de transformer des ressources collectées en objets utiles.
Ouvrez l'inventaire (**Tab**), puis accédez à l'onglet **Crafting** pour voir les recettes disponibles.
Comment crafter
---------------
1. Ouvrez l'inventaire avec **Tab**.
2. Sélectionnez l'onglet **Crafting**.
3. Les recettes disponibles (ingrédients présents en inventaire) s'affichent en surbrillance.
4. Cliquez sur la recette souhaitée pour fabriquer l'objet.
Recettes disponibles
--------------------
Lampe bio
~~~~~~~~~
Éclaire une zone de 10 blocs de rayon. Indispensable dans les abysses.
+------------------+----------+----------------------+
| Ingrédient | Quantité | Résultat |
+==================+==========+======================+
| Corail Bleu | 2 | Lampe bio × 1 |
+------------------+----------+ |
| Kelp | 1 | |
+------------------+----------+----------------------+
Harpon
~~~~~~
Arme à distance. Permet d'attaquer les mobs de loin (portée 12 unités, dégâts 4 PV).
+------------------+----------+----------------------+
| Ingrédient | Quantité | Résultat |
+==================+==========+======================+
| Roche | 2 | Harpon × 1 |
+------------------+----------+ |
| Épave | 2 | |
+------------------+----------+----------------------+
Bulle d'air
~~~~~~~~~~~
Consommable d'urgence. Recharge instantanément 50 % de la jauge d'oxygène.
+------------------+----------+----------------------+
| Ingrédient | Quantité | Résultat |
+==================+==========+======================+
| Kelp | 3 | Bulle d'air × 1 |
+------------------+----------+ |
| Glace | 1 | |
+------------------+----------+----------------------+
.. note::
La **Glace** se trouve uniquement dans les zones profondes (abysses, 80 m+).
Algue cuisinée
~~~~~~~~~~~~~~
Nourriture. Restaure 30 % de la jauge de faim.
+------------------+----------+----------------------+
| Ingrédient | Quantité | Résultat |
+==================+==========+======================+
| Kelp | 2 | Algue cuisinée × 2 |
+------------------+----------+----------------------+
.. tip::
Recette très accessible dès le début. La forêt de kelp est le meilleur endroit pour
farmer le Kelp.
Armure écailles
~~~~~~~~~~~~~~~
Protection passive. Réduit les dégâts reçus de 25 % (toutes sources).
+------------------+----------+----------------------+
| Ingrédient | Quantité | Résultat |
+==================+==========+======================+
| Corail Rouge | 4 | Armure écailles × 1 |
+------------------+----------+ |
| Épave | 2 | |
+------------------+----------+----------------------+
.. warning::
L'armure se casse après 50 impacts. Craftez-en une de rechange avant de partir
explorer les épaves ou les abysses.
Ressources et où les trouver
----------------------------
+-------------------+---------------------------+
| Ressource | Biome / Source |
+===================+===========================+
| Corail Bleu | Récif corallien |
+-------------------+---------------------------+
| Corail Rouge | Récif corallien |
+-------------------+---------------------------+
| Kelp | Forêt de kelp |
+-------------------+---------------------------+
| Roche | Épaves, fond marin |
+-------------------+---------------------------+
| Épave | Zones d'épaves |
+-------------------+---------------------------+
| Glace | Abysses (80 m+) |
+-------------------+---------------------------+

View File

@@ -0,0 +1,74 @@
Installation — Guide joueur
===========================
Configuration minimale requise
-------------------------------
+--------------------+-----------------------------------------------+
| Composant | Minimum requis |
+====================+===============================================+
| Système | Windows 10 / Windows 11 (64 bits) |
+--------------------+-----------------------------------------------+
| RAM | 4 Go |
+--------------------+-----------------------------------------------+
| GPU | Compatible Vulkan 1.0 ou DirectX 12 |
+--------------------+-----------------------------------------------+
| Stockage | 500 Mo d'espace libre |
+--------------------+-----------------------------------------------+
| Réseau | Connexion Internet (multijoueur uniquement) |
+--------------------+-----------------------------------------------+
Téléchargement
--------------
La dernière version de DauphinCraft est disponible sur le dépôt officiel :
.. code-block:: text
http://<gitea-host>/dauphincraft/releases
Téléchargez l'archive ``DauphinCraft-v0.1.0-windows.zip`` correspondant à votre système.
.. note::
Remplacez ``<gitea-host>`` par l'adresse fournie par votre administrateur ou la communauté.
Procédure d'installation
------------------------
1. Décompressez l'archive ``DauphinCraft-v0.1.0-windows.zip`` dans le dossier de votre choix.
2. Ouvrez le dossier extrait.
3. Double-cliquez sur ``DauphinCraft.exe`` pour lancer le jeu.
Aucune installation supplémentaire n'est nécessaire. Le jeu est autonome (portable).
Dépannage antivirus
-------------------
Windows Defender ou votre antivirus peut bloquer le lancement car l'exécutable n'est pas signé.
**Solution :**
1. Clic droit sur ``DauphinCraft.exe`` → **Propriétés**.
2. En bas de l'onglet *Général*, cochez **Débloquer** si la case est présente.
3. Cliquez sur **Appliquer**, puis **OK**.
4. Relancez ``DauphinCraft.exe``.
Si votre antivirus met en quarantaine le fichier, ajoutez une exception pour le dossier
d'installation de DauphinCraft.
.. warning::
Téléchargez toujours DauphinCraft depuis le dépôt officiel. Ne faites pas confiance à des
sources tierces inconnues.
Première connexion
------------------
Au premier lancement, le jeu vous propose trois modes :
- **Solo** : jouer seul en monde local.
- **Héberger** : créer une partie multijoueur sur votre machine.
- **Rejoindre** : rejoindre une partie existante avec une IP et un port.
Voir :doc:`multijoueur` pour les détails réseau.

View File

@@ -0,0 +1,86 @@
Mécaniques de jeu
=================
Jauges du joueur
----------------
Trois jauges sont visibles en permanence dans le HUD (en bas de l'écran) :
**Oxygène (jauge bleue)**
Représente l'air restant dans les poumons du dauphin. Elle diminue lorsque vous évoluez
sous l'eau sans remonter à la surface. À zéro, vous perdez de la vie rapidement.
Remontez à la surface pour la recharger instantanément.
**Vie (jauge rouge)**
Points de vie du dauphin. Diminue en cas d'attaque par un mob hostile ou de manque
d'oxygène prolongé. Se régénère lentement en nageant sans contrainte, ou plus vite
en consommant de la nourriture.
**Faim (jauge orange)**
Représente la satiété. Diminue au fil du temps et lors d'actions intenses (boost, écholocation).
Si la jauge de faim atteint zéro, la régénération de vie s'arrête.
Gestion de l'oxygène
--------------------
Votre dauphin a besoin de respirer. La surface de l'eau correspond à la limite supérieure
du monde. Remontez régulièrement pour éviter de vous noyer.
- Sous **50 % d'oxygène** : la jauge clignote doucement.
- Sous **20 % d'oxygène** : la jauge clignote rapidement et un son d'alerte retentit.
- À **0 %** : vous perdez 1 PV par seconde jusqu'à la remontée.
.. tip::
Craftez une **Bulle d'air** (voir :doc:`craft`) pour obtenir une réserve d'oxygène
supplémentaire d'urgence.
Biomes sous-marins
------------------
Le monde est généré de façon procédurale et comporte quatre biomes principaux :
**Récif corallien**
Zone peu profonde (030 m), lumineuse, riche en coraux et poissons. Idéal pour débuter.
On y trouve du **Corail Bleu** et du **Corail Rouge**.
**Forêt de kelp**
Zone intermédiaire (2060 m). Grandes algues offrant une visibilité réduite.
Source principale de **Kelp** et de **Kelp_Food**.
**Abysses**
Zone profonde (80 m et plus). Obscurité totale sans lampe bio. Ressources rares
mais mobs dangereux (Requins).
**Épaves**
Zones ponctuelles à toutes profondeurs. Recèlent de la **Roche** et de l'**Épave**
(matériaux pour recettes avancées). Attention aux Requins patrouillant les épaves.
Mobs
----
Trois types de créatures peuplent les océans de DauphinCraft :
**Bancs de poissons (FishSchool)**
Neutres. Nagent en groupe de manière aléatoire. Source de nourriture si attaqués.
Comportement de fuite à l'approche du joueur.
**Méduses (Jellyfish)**
Passives mais infligent des dégâts de contact si on les touche (1 PV par contact).
Lumineuses, elles sont utiles comme repères dans les abysses.
**Requin (Shark)**
Hostile. Attaque le joueur à vue dans un rayon de 15 unités. Inflige 3 PV par morsure.
Peut être repoussé avec une **impulsion d'écholocation** (touche E).
Mort et respawn
---------------
Quand vos points de vie atteignent zéro, vous mourez. Un écran de mort s'affiche.
- Vos blocs posés dans le monde restent en place.
- Votre inventaire est conservé.
- Vous réapparaissez au point de spawn initial (centre du monde, en surface).
En multijoueur, les autres joueurs continuent de jouer pendant votre respawn. Le délai
de respawn est de **3 secondes**.

View File

@@ -0,0 +1,78 @@
Multijoueur
===========
DauphinCraft supporte jusqu'à **16 joueurs simultanés** via une architecture réseau ENet UDP.
Modes de jeu
------------
**Solo**
Jouer seul en monde local. Aucune connexion réseau requise. La partie n'est pas accessible
aux autres joueurs.
**Héberger une partie**
Lancez un serveur depuis votre propre machine. Les joueurs de votre réseau local (ou Internet
si vous configurez votre routeur) peuvent vous rejoindre.
**Rejoindre une partie**
Entrez l'adresse IP et le port d'une partie existante pour la rejoindre.
Port réseau
-----------
DauphinCraft utilise le port **UDP 7777** par défaut.
Pour héberger une partie accessible depuis Internet :
1. Ouvrez les paramètres de votre box/routeur.
2. Créez une règle de redirection de port (NAT/PAT) :
- **Port externe** : 7777 (UDP)
- **Port interne** : 7777 (UDP)
- **IP locale cible** : l'adresse IP locale de votre machine (ex. 192.168.1.10)
3. Communiquez votre **IP publique** et le port **7777** à vos amis.
.. tip::
Pour trouver votre IP publique, allez sur ``https://ifconfig.me`` dans un navigateur.
Rejoindre une partie
--------------------
Dans le menu principal, choisissez **Rejoindre**, puis entrez :
- **Adresse IP** : l'IP fournie par l'hôte (ex. ``203.0.113.42``).
- **Port** : ``7777`` (ou le port personnalisé communiqué par l'hôte).
Cliquez sur **Connexion**. Si le serveur est disponible, vous rejoindrez la partie en quelques
secondes.
Héberger depuis le jeu
-----------------------
Choisissez **Héberger** dans le menu principal. Le jeu démarre un serveur intégré (écoute sur
le port 7777 UDP) tout en vous permettant de jouer simultanément.
.. note::
L'hébergement intégré est pratique pour des sessions entre amis. Pour un serveur permanent
24h/24, consultez :doc:`../admin/installation_serveur`.
Serveur public officiel
------------------------
Un serveur public de démonstration est disponible à l'adresse :
.. code-block:: text
http://example.invalid (à remplacer lors du déploiement)
.. warning::
Ce serveur est fourni à titre de démonstration. Il peut être indisponible ou réinitialisé
sans préavis.
Limite de joueurs
-----------------
La limite par défaut est **16 joueurs** par session. Elle peut être modifiée par l'administrateur
du serveur (voir :doc:`../admin/configuration`).

View File

@@ -0,0 +1,123 @@
/* Compatability shim for jQuery and underscores.js.
*
* Copyright Sphinx contributors
* Released under the two clause BSD licence
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

294
docs/_build/html/_static/base-stemmer.js vendored Normal file
View File

@@ -0,0 +1,294 @@
/**@constructor*/
BaseStemmer = function() {
this.setCurrent = function(value) {
this.current = value;
this.cursor = 0;
this.limit = this.current.length;
this.limit_backward = 0;
this.bra = this.cursor;
this.ket = this.limit;
};
this.getCurrent = function() {
return this.current;
};
this.copy_from = function(other) {
this.current = other.current;
this.cursor = other.cursor;
this.limit = other.limit;
this.limit_backward = other.limit_backward;
this.bra = other.bra;
this.ket = other.ket;
};
this.in_grouping = function(s, min, max) {
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor++;
return true;
};
this.in_grouping_b = function(s, min, max) {
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor--;
return true;
};
this.out_grouping = function(s, min, max) {
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) {
this.cursor++;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) {
this.cursor++;
return true;
}
return false;
};
this.out_grouping_b = function(s, min, max) {
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) {
this.cursor--;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) {
this.cursor--;
return true;
}
return false;
};
this.eq_s = function(s)
{
if (this.limit - this.cursor < s.length) return false;
if (this.current.slice(this.cursor, this.cursor + s.length) != s)
{
return false;
}
this.cursor += s.length;
return true;
};
this.eq_s_b = function(s)
{
if (this.cursor - this.limit_backward < s.length) return false;
if (this.current.slice(this.cursor - s.length, this.cursor) != s)
{
return false;
}
this.cursor -= s.length;
return true;
};
/** @return {number} */ this.find_among = function(v)
{
var i = 0;
var j = v.length;
var c = this.cursor;
var l = this.limit;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >>> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j; // smaller
// w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional)
var w = v[k];
var i2;
for (i2 = common; i2 < w[0].length; i2++)
{
if (c + common == l)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break; // v->s has been inspected
if (j == i) break; // only one item in v
// - but now we need to go round once more to get
// v->s inspected. This looks messy, but is actually
// the optimal approach.
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c + w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c + w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
// find_among_b is for backwards processing. Same comments apply
this.find_among_b = function(v)
{
var i = 0;
var j = v.length
var c = this.cursor;
var lb = this.limit_backward;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j;
var w = v[k];
var i2;
for (i2 = w[0].length - 1 - common; i2 >= 0; i2--)
{
if (c - common == lb)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break;
if (j == i) break;
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c - w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c - w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
/* to replace chars between c_bra and c_ket in this.current by the
* chars in s.
*/
this.replace_s = function(c_bra, c_ket, s)
{
var adjustment = s.length - (c_ket - c_bra);
this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
this.limit += adjustment;
if (this.cursor >= c_ket) this.cursor += adjustment;
else if (this.cursor > c_bra) this.cursor = c_bra;
return adjustment;
};
this.slice_check = function()
{
if (this.bra < 0 ||
this.bra > this.ket ||
this.ket > this.limit ||
this.limit > this.current.length)
{
return false;
}
return true;
};
this.slice_from = function(s)
{
var result = false;
if (this.slice_check())
{
this.replace_s(this.bra, this.ket, s);
result = true;
}
return result;
};
this.slice_del = function()
{
return this.slice_from("");
};
this.insert = function(c_bra, c_ket, s)
{
var adjustment = this.replace_s(c_bra, c_ket, s);
if (c_bra <= this.bra) this.bra += adjustment;
if (c_bra <= this.ket) this.ket += adjustment;
};
this.slice_to = function()
{
var result = '';
if (this.slice_check())
{
result = this.current.slice(this.bra, this.ket);
}
return result;
};
this.assign_to = function()
{
return this.current.slice(0, this.limit);
};
};

914
docs/_build/html/_static/basic.css vendored Normal file
View File

@@ -0,0 +1,914 @@
/*
* Sphinx stylesheet -- basic theme.
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin-top: 10px;
}
ul.search li {
padding: 5px 0;
}
ul.search li a {
font-weight: bold;
}
ul.search li p.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
a:visited {
color: #551A8B;
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
aside.footnote > span,
div.citation > span {
float: left;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
content: "";
clear: both;
}
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
.sig dd {
margin-top: 0px;
margin-bottom: 0px;
}
.sig dl {
margin-top: 0px;
margin-bottom: 0px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0 0.5em;
content: ":";
display: inline-block;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
.translated {
background-color: rgba(207, 255, 207, 0.2)
}
.untranslated {
background-color: rgba(255, 207, 207, 0.2)
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
white-space: nowrap;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

View File

@@ -0,0 +1 @@
.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

149
docs/_build/html/_static/doctools.js vendored Normal file
View File

@@ -0,0 +1,149 @@
/*
* Base JavaScript utilities for all Sphinx HTML documentation.
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
}
};
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
},
/**
* Initialise the domain index toggle buttons
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
},
initOnKeyListeners: () => {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
if (!event.shiftKey) {
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
};
// quick alias for translations
const _ = Documentation.gettext;
_ready(Documentation.init);

View File

@@ -0,0 +1,13 @@
const DOCUMENTATION_OPTIONS = {
VERSION: '0.1.0',
LANGUAGE: 'fr',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true,
ENABLE_SEARCH_SHORTCUTS: true,
};

BIN
docs/_build/html/_static/file.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

1325
docs/_build/html/_static/french-stemmer.js vendored Normal file

File diff suppressed because it is too large Load Diff

2
docs/_build/html/_static/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});

1
docs/_build/html/_static/js/theme.js vendored Normal file

File diff suppressed because one or more lines are too long

228
docs/_build/html/_static/js/versions.js vendored Normal file
View File

@@ -0,0 +1,228 @@
const themeFlyoutDisplay = "hidden";
const themeVersionSelector = true;
const themeLanguageSelector = true;
if (themeFlyoutDisplay === "attached") {
function renderLanguages(config) {
if (!config.projects.translations.length) {
return "";
}
// Insert the current language to the options on the selector
let languages = config.projects.translations.concat(config.projects.current);
languages = languages.sort((a, b) => a.language.name.localeCompare(b.language.name));
const languagesHTML = `
<dl>
<dt>Languages</dt>
${languages
.map(
(translation) => `
<dd ${translation.slug == config.projects.current.slug ? 'class="rtd-current-item"' : ""}>
<a href="${translation.urls.documentation}">${translation.language.code}</a>
</dd>
`,
)
.join("\n")}
</dl>
`;
return languagesHTML;
}
function renderVersions(config) {
if (!config.versions.active.length) {
return "";
}
const versionsHTML = `
<dl>
<dt>Versions</dt>
${config.versions.active
.map(
(version) => `
<dd ${version.slug === config.versions.current.slug ? 'class="rtd-current-item"' : ""}>
<a href="${version.urls.documentation}">${version.slug}</a>
</dd>
`,
)
.join("\n")}
</dl>
`;
return versionsHTML;
}
function renderDownloads(config) {
if (!Object.keys(config.versions.current.downloads).length) {
return "";
}
const downloadsNameDisplay = {
pdf: "PDF",
epub: "Epub",
htmlzip: "HTML",
};
const downloadsHTML = `
<dl>
<dt>Téléchargements</dt>
${Object.entries(config.versions.current.downloads)
.map(
([name, url]) => `
<dd>
<a href="${url}">${downloadsNameDisplay[name]}</a>
</dd>
`,
)
.join("\n")}
</dl>
`;
return downloadsHTML;
}
document.addEventListener("readthedocs-addons-data-ready", function (event) {
const config = event.detail.data();
const flyout = `
<div class="rst-versions" data-toggle="rst-versions" role="note">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> Read the Docs</span>
v: ${config.versions.current.slug}
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<div class="injected">
${renderLanguages(config)}
${renderVersions(config)}
${renderDownloads(config)}
<dl>
<dt>À propos de Read the Docs</dt>
<dd>
<a href="${config.projects.current.urls.home}">Accueil du projet</a>
</dd>
<dd>
<a href="${config.projects.current.urls.builds}">Compilations</a>
</dd>
<dd>
<a href="${config.projects.current.urls.downloads}">Téléchargements</a>
</dd>
</dl>
<dl>
<dt>Recherche</dt>
<dd>
<form id="flyout-search-form">
<input
class="wy-form"
type="text"
name="q"
aria-label="Rechercher docs"
placeholder="Rechercher docs"
/>
</form>
</dd>
</dl>
<hr />
<small>
<span>Hosted by <a href="https://about.readthedocs.org/?utm_source=&utm_content=flyout">Read the Docs</a></span>
</small>
</div>
</div>
`;
// Inject the generated flyout into the body HTML element.
document.body.insertAdjacentHTML("beforeend", flyout);
// Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout.
document
.querySelector("#flyout-search-form")
.addEventListener("focusin", () => {
const event = new CustomEvent("readthedocs-search-show");
document.dispatchEvent(event);
});
})
}
if (themeLanguageSelector || themeVersionSelector) {
function onSelectorSwitch(event) {
const option = event.target.selectedIndex;
const item = event.target.options[option];
window.location.href = item.dataset.url;
}
document.addEventListener("readthedocs-addons-data-ready", function (event) {
const config = event.detail.data();
const versionSwitch = document.querySelector(
"div.switch-menus > div.version-switch",
);
if (themeVersionSelector) {
let versions = config.versions.active;
if (config.versions.current.hidden || config.versions.current.type === "external") {
versions.unshift(config.versions.current);
}
const versionSelect = `
<select>
${versions
.map(
(version) => `
<option
value="${version.slug}"
${config.versions.current.slug === version.slug ? 'selected="selected"' : ""}
data-url="${version.urls.documentation}">
${version.slug}
</option>`,
)
.join("\n")}
</select>
`;
versionSwitch.innerHTML = versionSelect;
versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
}
const languageSwitch = document.querySelector(
"div.switch-menus > div.language-switch",
);
if (themeLanguageSelector) {
if (config.projects.translations.length) {
// Add the current language to the options on the selector
let languages = config.projects.translations.concat(
config.projects.current,
);
languages = languages.sort((a, b) =>
a.language.name.localeCompare(b.language.name),
);
const languageSelect = `
<select>
${languages
.map(
(language) => `
<option
value="${language.language.code}"
${config.projects.current.slug === language.slug ? 'selected="selected"' : ""}
data-url="${language.urls.documentation}">
${language.language.name}
</option>`,
)
.join("\n")}
</select>
`;
languageSwitch.innerHTML = languageSelect;
languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
}
else {
languageSwitch.remove();
}
}
});
}
document.addEventListener("readthedocs-addons-data-ready", function (event) {
// Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav.
document
.querySelector("[role='search'] input")
.addEventListener("focusin", () => {
const event = new CustomEvent("readthedocs-search-show");
document.dispatchEvent(event);
});
});

File diff suppressed because one or more lines are too long

BIN
docs/_build/html/_static/minus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

BIN
docs/_build/html/_static/plus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

75
docs/_build/html/_static/pygments.css vendored Normal file
View File

@@ -0,0 +1,75 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #F00 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666 } /* Operator */
.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #9C6500 } /* Comment.Preproc */
.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #E40000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #008400 } /* Generic.Inserted */
.highlight .go { color: #717171 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #04D } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #687822 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #00F; font-weight: bold } /* Name.Class */
.highlight .no { color: #800 } /* Name.Constant */
.highlight .nd { color: #A2F } /* Name.Decorator */
.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #00F } /* Name.Function */
.highlight .nl { color: #767600 } /* Name.Label */
.highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */
.highlight .w { color: #BBB } /* Text.Whitespace */
.highlight .mb { color: #666 } /* Literal.Number.Bin */
.highlight .mf { color: #666 } /* Literal.Number.Float */
.highlight .mh { color: #666 } /* Literal.Number.Hex */
.highlight .mi { color: #666 } /* Literal.Number.Integer */
.highlight .mo { color: #666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #00F } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666 } /* Literal.Number.Integer.Long */

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

632
docs/_build/html/_static/searchtools.js vendored Normal file
View File

@@ -0,0 +1,632 @@
/*
* Sphinx JavaScript utilities for the full-text search.
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename, kind] = result
return score
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
};
}
// Global search result kind enum, used by themes to style search results.
class SearchResultKind {
static get index() { return "index"; }
static get object() { return "object"; }
static get text() { return "text"; }
static get title() { return "title"; }
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms, highlightTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const contentRoot = document.documentElement.dataset.content_root;
const [docName, title, anchor, descr, score, _filename, kind] = item;
let listItem = document.createElement("li");
// Add a class representing the item's type:
// can be used by a theme's CSS selector for styling
// See SearchResultKind for the class names.
listItem.classList.add(`kind-${kind}`);
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = contentRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = contentRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
}
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr) {
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
// highlight search terms in the description
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
}
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms, anchor)
);
// highlight search terms in the summary
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = Documentation.ngettext(
"Search finished, found one page matching the search query.",
"Search finished, found ${resultCount} pages matching the search query.",
resultCount,
).replace('${resultCount}', resultCount);
};
const _displayNextItem = (
results,
resultCount,
searchTerms,
highlightTerms,
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms, highlightTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
// Helper function used by query() to order search results.
// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
// Order the results by score (in opposite order of appearance, since the
// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
const _orderResultsByScoreThenName = (a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
}
return leftScore > rightScore ? 1 : -1;
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
htmlToText: (htmlString, anchor) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
for (const removalQuery of [".headerlink", "script", "style"]) {
htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
}
if (anchor) {
const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
if (anchorContent) return anchorContent.textContent;
console.warn(
`Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
);
}
// if anchor not specified or not found, fall back to main content
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
);
return "";
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
}
},
hasIndex: () => Search._index !== null,
deferQuery: (query) => (Search._queued_query = query),
stopPulse: () => (Search._pulse_status = -1),
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.setAttribute("role", "list");
searchList.classList.add("search");
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
},
_parseQuery: (query) => {
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the word
let word = stemmer.stemWord(queryTermLower);
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
}
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
},
/**
* execute search (requires search index to be loaded)
*/
_performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
// Collect multiple result groups to be sorted separately and then ordered.
// Each is an array of [docname, title, anchor, descr, score, filename, kind].
const normalResults = [];
const nonMainIndexResults = [];
_removeChildren(document.getElementById("search-progress"));
const queryLower = query.toLowerCase().trim();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
const score = Math.round(Scorer.title * queryLower.length / title.length);
const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
normalResults.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score + boost,
filenames[file],
SearchResultKind.title,
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id, isMain] of foundEntries) {
const score = Math.round(100 * queryLower.length / entry.length);
const result = [
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
SearchResultKind.index,
];
if (isMain) {
normalResults.push(result);
} else {
nonMainIndexResults.push(result);
}
}
}
}
// lookup as object
objectTerms.forEach((term) =>
normalResults.push(...Search.performObjectSearch(term, objectTerms))
);
// lookup as search terms in fulltext
normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) {
normalResults.forEach((item) => (item[4] = Scorer.score(item)));
nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
}
// Sort each group of results by score and then alphabetically by name.
normalResults.sort(_orderResultsByScoreThenName);
nonMainIndexResults.sort(_orderResultsByScoreThenName);
// Combine the result groups in (reverse) order.
// Non-main index entries are typically arbitrary cross-references,
// so display them after other results.
let results = [...nonMainIndexResults, ...normalResults];
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
return results.reverse();
},
query: (query) => {
const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms, highlightTerms);
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
const results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
SearchResultKind.object,
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
if (!terms.hasOwnProperty(word)) {
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord))
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
}
if (!titleTerms.hasOwnProperty(word)) {
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord))
arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
});
}
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
});
// create the mapping
files.forEach((file) => {
if (!fileMap.has(file)) fileMap.set(file, [word]);
else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
});
});
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
SearchResultKind.text,
]);
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
*/
makeSearchSummary: (htmlText, keywords, anchor) => {
const text = Search.htmlToText(htmlText, anchor);
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return summary;
},
};
_ready(Search.init);

View File

@@ -0,0 +1,154 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
const rest = document.createTextNode(val.substr(pos + text.length));
parent.insertBefore(
span,
parent.insertBefore(
rest,
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
/* There may be more occurrences of search term in this node. So call this
* function recursively on the remaining fragment.
*/
_highlight(rest, addItems, text, className);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(() => {
/* Do not call highlightSearchWords() when we are on the search page.
* It will highlight words from the *previous* search query.
*/
if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
SphinxHighlight.initEscapeListener();
});

View File

@@ -0,0 +1,64 @@
Documentation.addTranslations({
"locale": "fr",
"messages": {
"%(filename)s &#8212; %(docstitle)s": "%(filename)s &#8212; %(docstitle)s",
"&#169; %(copyright_prefix)s %(copyright)s.": "&#169; %(copyright_prefix)s %(copyright)s.",
", in ": ", dans ",
"About these documents": "\u00c0 propos de ces documents",
"Automatically generated list of changes in version %(version)s": "Liste auto-g\u00e9n\u00e9r\u00e9e des modifications dans la version %(version)s",
"C API changes": "Modifications de l'API C",
"Changes in Version %(version)s &#8212; %(docstitle)s": "Changements dans la version %(version)s &#8212; %(docstitle)s",
"Collapse sidebar": "R\u00e9duire la barre lat\u00e9rale",
"Complete Table of Contents": "Table des mati\u00e8res compl\u00e8te",
"Contents": "Contenu",
"Copyright": "Copyright",
"Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Cr\u00e9\u00e9 en utilisant <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.",
"Expand sidebar": "Agrandir la barre lat\u00e9rale",
"Full index on one page": "Index complet sur une seule page",
"General Index": "Index g\u00e9n\u00e9ral",
"Global Module Index": "Index g\u00e9n\u00e9ral des modules",
"Go": "Go",
"Hide Search Matches": "Cacher les r\u00e9sultats de la recherche",
"Index": "Index",
"Index &#x2013; %(key)s": "Index &#x2013; %(key)s",
"Index pages by letter": "Indexer les pages par lettre",
"Indices and tables:": "Index et tables :",
"Last updated on %(last_updated)s.": "Mis \u00e0 jour le %(last_updated)s.",
"Library changes": "Modifications de la biblioth\u00e8que",
"Navigation": "Navigation",
"Next topic": "Sujet suivant",
"Other changes": "Autres modifications",
"Overview": "R\u00e9sum\u00e9",
"Please activate JavaScript to enable the search\n functionality.": "Veuillez activer le JavaScript pour que la recherche fonctionne.",
"Preparing search...": "Pr\u00e9paration de la recherche...",
"Previous topic": "Sujet pr\u00e9c\u00e9dent",
"Quick search": "Recherche rapide",
"Search": "Recherche",
"Search Page": "Page de recherche",
"Search Results": "R\u00e9sultats de la recherche",
"Search finished, found one page matching the search query.": [
"La recherche est termin\u00e9e, une page correspondant \u00e0 la requ\u00eate a \u00e9t\u00e9 trouv\u00e9e.",
"Recherche termin\u00e9e, ${resultCount} pages trouv\u00e9es correspondant \u00e0 la requ\u00eate.",
"Recherche termin\u00e9e, ${resultCount} pages trouv\u00e9es correspondant \u00e0 la requ\u00eate."
],
"Search within %(docstitle)s": "Recherchez dans %(docstitle)s",
"Searching": "Recherche en cours",
"Searching for multiple words only shows matches that contain\n all words.": "Une recherche sur plusieurs mots ne retourne que les r\u00e9sultats contenant tous les mots.",
"Show Source": "Montrer le code source",
"Table of Contents": "Table des mati\u00e8res",
"This Page": "Cette page",
"Welcome! This is": "Bienvenue ! Ceci est",
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Votre recherche ne correspond \u00e0 aucun document. Veuillez v\u00e9rifier que les mots sont correctement orthographi\u00e9s et que vous avez s\u00e9lectionn\u00e9 assez de cat\u00e9gories.",
"all functions, classes, terms": "toutes les fonctions, classes, termes",
"can be huge": "peut \u00eatre \u00e9norme",
"last updated": "derni\u00e8re modification",
"lists all sections and subsections": "lister l'ensemble des sections et sous-sections",
"next chapter": "Chapitre suivant",
"previous chapter": "Chapitre pr\u00e9c\u00e9dent",
"quick access to all modules": "acc\u00e8s rapide \u00e0 l'ensemble des modules",
"search": "rechercher",
"search this documentation": "rechercher dans cette documentation",
"the documentation for": "la documentation pour"
},
"plural_expr": "(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2"
});

View File

@@ -0,0 +1,300 @@
<!DOCTYPE html>
<html class="writer-html5" lang="fr" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Configuration du serveur &mdash; DauphinCraft — Manuel joueur et serveur</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=897fae25"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/translations.js?v=e6b791cb"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Recherche" href="../search.html" />
<link rel="next" title="Maintenance du serveur" href="maintenance.html" />
<link rel="prev" title="Installation du serveur" href="installation_serveur.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #0b3d5c" >
<a href="../index.html" class="icon icon-home">
DauphinCraft
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Rechercher docs" aria-label="Rechercher docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Joueur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../joueur/installation.html">Installation — Guide joueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#configuration-minimale-requise">Configuration minimale requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#telechargement">Téléchargement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#depannage-antivirus">Dépannage antivirus</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#premiere-connexion">Première connexion</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/controles.html">Contrôles</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#deplacement">Déplacement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#capacites-speciales">Capacités spéciales</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interaction-avec-le-monde">Interaction avec le monde</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interface">Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#chat">Chat</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#menu-pause">Menu pause</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/mecaniques.html">Mécaniques de jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#jauges-du-joueur">Jauges du joueur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#gestion-de-l-oxygene">Gestion de loxygène</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#biomes-sous-marins">Biomes sous-marins</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mobs">Mobs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mort-et-respawn">Mort et respawn</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/craft.html">Crafting — Recettes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#comment-crafter">Comment crafter</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#recettes-disponibles">Recettes disponibles</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#lampe-bio">Lampe bio</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#harpon">Harpon</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#bulle-d-air">Bulle dair</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#algue-cuisinee">Algue cuisinée</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#armure-ecailles">Armure écailles</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#ressources-et-ou-les-trouver">Ressources et où les trouver</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/multijoueur.html">Multijoueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#modes-de-jeu">Modes de jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#port-reseau">Port réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#rejoindre-une-partie">Rejoindre une partie</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#heberger-depuis-le-jeu">Héberger depuis le jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#serveur-public-officiel">Serveur public officiel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#limite-de-joueurs">Limite de joueurs</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Administrateur serveur</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="installation_serveur.html">Installation du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#extraction-de-l-archive">Extraction de larchive</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#verification-du-service">Vérification du service</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#ouverture-du-port-pare-feu">Ouverture du port pare-feu</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#consultation-des-logs">Consultation des logs</a></li>
</ul>
</li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Configuration du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#fichier-de-service-systemd">Fichier de service systemd</a></li>
<li class="toctree-l2"><a class="reference internal" href="#modifier-le-port-d-ecoute">Modifier le port découte</a></li>
<li class="toctree-l2"><a class="reference internal" href="#nombre-maximum-de-joueurs">Nombre maximum de joueurs</a></li>
<li class="toctree-l2"><a class="reference internal" href="#sauvegarde-du-monde">Sauvegarde du monde</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintenance du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#mise-a-jour-du-serveur">Mise à jour du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#surveillance-et-logs">Surveillance et logs</a></li>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#verification-de-l-etat-du-serveur">Vérification de létat du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#redemarrage-automatique">Redémarrage automatique</a></li>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#gestion-des-joueurs-kick-ban">Gestion des joueurs (Kick / Ban)</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Développement</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../dev/architecture.html">Architecture technique</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#moteur-et-langage">Moteur et langage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#architecture-reseau">Architecture réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#structure-du-projet">Structure du projet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#flux-de-demarrage">Flux de démarrage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#presets-d-export">Présets dexport</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../dev/modules.html">Modules du jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-monde-world">Module Monde (<code class="docutils literal notranslate"><span class="pre">world/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-dauphin-dolphin">Module Dauphin (<code class="docutils literal notranslate"><span class="pre">dolphin/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-ambiance-ambience">Module Ambiance (<code class="docutils literal notranslate"><span class="pre">ambience/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-inventaire-inventory">Module Inventaire (<code class="docutils literal notranslate"><span class="pre">inventory/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-mobs-mobs">Module Mobs (<code class="docutils literal notranslate"><span class="pre">mobs/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-reseau-net">Module Réseau (<code class="docutils literal notranslate"><span class="pre">net/</span></code>)</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../dev/contribuer.html">Contribuer au projet</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#cloner-le-depot">Cloner le dépôt</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#ouvrir-le-projet-dans-godot">Ouvrir le projet dans Godot</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#build-et-export">Build et export</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#style-de-code">Style de code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#soumettre-une-contribution">Soumettre une contribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#discussion-et-support">Discussion et support</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Annexes</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../credits.html">Crédits</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#moteur">Moteur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#assets">Assets</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#attribution-requise">Attribution requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#auteur-du-jeu">Auteur du jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#remerciements">Remerciements</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../changelog.html">Historique des versions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../changelog.html#version-0-1-0-sortie-initiale">Version 0.1.0 — Sortie initiale</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#nouvelles-fonctionnalites">Nouvelles fonctionnalités</a></li>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#limitations-connues">Limitations connues</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #0b3d5c" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">DauphinCraft</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Configuration du serveur</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/admin/configuration.rst.txt" rel="nofollow"> Afficher la source de la page</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="configuration-du-serveur">
<h1>Configuration du serveur<a class="headerlink" href="#configuration-du-serveur" title="Lien vers cette rubrique"></a></h1>
<section id="fichier-de-service-systemd">
<h2>Fichier de service systemd<a class="headerlink" href="#fichier-de-service-systemd" title="Lien vers cette rubrique"></a></h2>
<p>Le service est défini dans :</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>/etc/systemd/system/dauphincraft.service
</pre></div>
</div>
<p>Contenu type :</p>
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[Unit]</span>
<span class="na">Description</span><span class="o">=</span><span class="s">DauphinCraft Game Server</span>
<span class="na">After</span><span class="o">=</span><span class="s">network.target</span>
<span class="k">[Service]</span>
<span class="na">User</span><span class="o">=</span><span class="s">dauphincraft</span>
<span class="na">WorkingDirectory</span><span class="o">=</span><span class="s">/opt/dauphincraft</span>
<span class="na">ExecStart</span><span class="o">=</span><span class="s">/opt/dauphincraft/DauphinCraft.x86_64 --headless --port 7777</span>
<span class="na">Restart</span><span class="o">=</span><span class="s">on-failure</span>
<span class="na">RestartSec</span><span class="o">=</span><span class="s">5s</span>
<span class="na">StandardOutput</span><span class="o">=</span><span class="s">append:/var/log/dauphincraft.log</span>
<span class="na">StandardError</span><span class="o">=</span><span class="s">append:/var/log/dauphincraft.log</span>
<span class="k">[Install]</span>
<span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span>
</pre></div>
</div>
</section>
<section id="modifier-le-port-d-ecoute">
<h2>Modifier le port découte<a class="headerlink" href="#modifier-le-port-d-ecoute" title="Lien vers cette rubrique"></a></h2>
<ol class="arabic">
<li><p>Éditez le fichier service :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>nano<span class="w"> </span>/etc/systemd/system/dauphincraft.service
</pre></div>
</div>
</li>
<li><p>Modifiez la ligne <code class="docutils literal notranslate"><span class="pre">ExecStart</span></code> pour changer le port :</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>ExecStart=/opt/dauphincraft/DauphinCraft.x86_64 --headless --port 9999
</pre></div>
</div>
</li>
<li><p>Rechargez la configuration et redémarrez le service :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>systemctl<span class="w"> </span>daemon-reload
sudo<span class="w"> </span>systemctl<span class="w"> </span>restart<span class="w"> </span>dauphincraft
</pre></div>
</div>
</li>
<li><p>Noubliez pas douvrir le nouveau port dans le pare-feu (voir <a class="reference internal" href="installation_serveur.html"><span class="doc">Installation du serveur</span></a>).</p></li>
</ol>
</section>
<section id="nombre-maximum-de-joueurs">
<h2>Nombre maximum de joueurs<a class="headerlink" href="#nombre-maximum-de-joueurs" title="Lien vers cette rubrique"></a></h2>
<p>La limite de joueurs est définie à <strong>16</strong> par défaut dans le code source
(<code class="docutils literal notranslate"><span class="pre">scripts/net/NetworkManager.gd</span></code>). Cette valeur sera exposée en paramètre
de ligne de commande dans une version future.</p>
<p>Pour modifier temporairement la limite, il est actuellement nécessaire de recompiler
le projet avec la valeur souhaitée.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Une option <code class="docutils literal notranslate"><span class="pre">--max-players</span> <span class="pre">&lt;N&gt;</span></code> sera ajoutée dans la version 0.2.0.</p>
</div>
</section>
<section id="sauvegarde-du-monde">
<h2>Sauvegarde du monde<a class="headerlink" href="#sauvegarde-du-monde" title="Lien vers cette rubrique"></a></h2>
<div class="admonition warning">
<p class="admonition-title">Avertissement</p>
<p>La sauvegarde persistante du monde nest pas encore implémentée dans la version 0.1.0.
Le monde est régénéré à chaque redémarrage du serveur.</p>
</div>
<p>Cette fonctionnalité est prévue pour une version future.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pied de page">
<a href="installation_serveur.html" class="btn btn-neutral float-left" title="Installation du serveur" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Précédent</a>
<a href="maintenance.html" class="btn btn-neutral float-right" title="Maintenance du serveur" accesskey="n" rel="next">Suivant <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Droits d'auteur 2026, Baptiste Moulin.</p>
</div>
Compilé avec <a href="https://www.sphinx-doc.org/">Sphinx</a> en utilisant un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">thème</a>
fourni par <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,320 @@
<!DOCTYPE html>
<html class="writer-html5" lang="fr" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Installation du serveur &mdash; DauphinCraft — Manuel joueur et serveur</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=897fae25"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/translations.js?v=e6b791cb"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Recherche" href="../search.html" />
<link rel="next" title="Configuration du serveur" href="configuration.html" />
<link rel="prev" title="Multijoueur" href="../joueur/multijoueur.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #0b3d5c" >
<a href="../index.html" class="icon icon-home">
DauphinCraft
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Rechercher docs" aria-label="Rechercher docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Joueur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../joueur/installation.html">Installation — Guide joueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#configuration-minimale-requise">Configuration minimale requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#telechargement">Téléchargement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#depannage-antivirus">Dépannage antivirus</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#premiere-connexion">Première connexion</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/controles.html">Contrôles</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#deplacement">Déplacement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#capacites-speciales">Capacités spéciales</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interaction-avec-le-monde">Interaction avec le monde</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interface">Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#chat">Chat</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#menu-pause">Menu pause</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/mecaniques.html">Mécaniques de jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#jauges-du-joueur">Jauges du joueur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#gestion-de-l-oxygene">Gestion de loxygène</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#biomes-sous-marins">Biomes sous-marins</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mobs">Mobs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mort-et-respawn">Mort et respawn</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/craft.html">Crafting — Recettes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#comment-crafter">Comment crafter</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#recettes-disponibles">Recettes disponibles</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#lampe-bio">Lampe bio</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#harpon">Harpon</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#bulle-d-air">Bulle dair</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#algue-cuisinee">Algue cuisinée</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#armure-ecailles">Armure écailles</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#ressources-et-ou-les-trouver">Ressources et où les trouver</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/multijoueur.html">Multijoueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#modes-de-jeu">Modes de jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#port-reseau">Port réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#rejoindre-une-partie">Rejoindre une partie</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#heberger-depuis-le-jeu">Héberger depuis le jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#serveur-public-officiel">Serveur public officiel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#limite-de-joueurs">Limite de joueurs</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Administrateur serveur</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Installation du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="#extraction-de-l-archive">Extraction de larchive</a></li>
<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="#verification-du-service">Vérification du service</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ouverture-du-port-pare-feu">Ouverture du port pare-feu</a></li>
<li class="toctree-l2"><a class="reference internal" href="#consultation-des-logs">Consultation des logs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="configuration.html#fichier-de-service-systemd">Fichier de service systemd</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration.html#modifier-le-port-d-ecoute">Modifier le port découte</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration.html#nombre-maximum-de-joueurs">Nombre maximum de joueurs</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration.html#sauvegarde-du-monde">Sauvegarde du monde</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintenance du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#mise-a-jour-du-serveur">Mise à jour du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#surveillance-et-logs">Surveillance et logs</a></li>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#verification-de-l-etat-du-serveur">Vérification de létat du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#redemarrage-automatique">Redémarrage automatique</a></li>
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#gestion-des-joueurs-kick-ban">Gestion des joueurs (Kick / Ban)</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Développement</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../dev/architecture.html">Architecture technique</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#moteur-et-langage">Moteur et langage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#architecture-reseau">Architecture réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#structure-du-projet">Structure du projet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#flux-de-demarrage">Flux de démarrage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#presets-d-export">Présets dexport</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../dev/modules.html">Modules du jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-monde-world">Module Monde (<code class="docutils literal notranslate"><span class="pre">world/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-dauphin-dolphin">Module Dauphin (<code class="docutils literal notranslate"><span class="pre">dolphin/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-ambiance-ambience">Module Ambiance (<code class="docutils literal notranslate"><span class="pre">ambience/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-inventaire-inventory">Module Inventaire (<code class="docutils literal notranslate"><span class="pre">inventory/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-mobs-mobs">Module Mobs (<code class="docutils literal notranslate"><span class="pre">mobs/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-reseau-net">Module Réseau (<code class="docutils literal notranslate"><span class="pre">net/</span></code>)</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../dev/contribuer.html">Contribuer au projet</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#cloner-le-depot">Cloner le dépôt</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#ouvrir-le-projet-dans-godot">Ouvrir le projet dans Godot</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#build-et-export">Build et export</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#style-de-code">Style de code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#soumettre-une-contribution">Soumettre une contribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#discussion-et-support">Discussion et support</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Annexes</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../credits.html">Crédits</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#moteur">Moteur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#assets">Assets</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#attribution-requise">Attribution requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#auteur-du-jeu">Auteur du jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#remerciements">Remerciements</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../changelog.html">Historique des versions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../changelog.html#version-0-1-0-sortie-initiale">Version 0.1.0 — Sortie initiale</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#nouvelles-fonctionnalites">Nouvelles fonctionnalités</a></li>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#limitations-connues">Limitations connues</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #0b3d5c" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">DauphinCraft</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Installation du serveur</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/admin/installation_serveur.rst.txt" rel="nofollow"> Afficher la source de la page</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="installation-du-serveur">
<h1>Installation du serveur<a class="headerlink" href="#installation-du-serveur" title="Lien vers cette rubrique"></a></h1>
<p>Ce guide décrit linstallation du serveur dédié DauphinCraft sur une machine Linux.</p>
<section id="prerequis">
<h2>Prérequis<a class="headerlink" href="#prerequis" title="Lien vers cette rubrique"></a></h2>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Composant</p></th>
<th class="head"><p>Requis</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Système</p></td>
<td><p>Debian 11+ ou Ubuntu 22.04 LTS (64 bits)</p></td>
</tr>
<tr class="row-odd"><td><p>RAM</p></td>
<td><p>1 Go minimum</p></td>
</tr>
<tr class="row-even"><td><p>Stockage</p></td>
<td><p>500 Mo libres</p></td>
</tr>
<tr class="row-odd"><td><p>Réseau</p></td>
<td><p>IP publique ou réseau local avec NAT</p></td>
</tr>
<tr class="row-even"><td><p>Port</p></td>
<td><p>UDP 7777 ouvert en entrée</p></td>
</tr>
<tr class="row-odd"><td><p>Droits</p></td>
<td><p>Accès root ou sudo</p></td>
</tr>
</tbody>
</table>
</section>
<section id="extraction-de-l-archive">
<h2>Extraction de larchive<a class="headerlink" href="#extraction-de-l-archive" title="Lien vers cette rubrique"></a></h2>
<p>Téléchargez larchive serveur depuis le dépôt officiel :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>wget<span class="w"> </span>http://&lt;gitea-host&gt;/dauphincraft/releases/download/v0.1.0/DauphinCraft-Server-v0.1.tar.gz
</pre></div>
</div>
<p>Extrayez-la dans <code class="docutils literal notranslate"><span class="pre">/opt</span></code> :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>DauphinCraft-Server-v0.1.tar.gz<span class="w"> </span>-C<span class="w"> </span>/opt/
sudo<span class="w"> </span>mv<span class="w"> </span>/opt/DauphinCraft-Server<span class="w"> </span>/opt/dauphincraft
</pre></div>
</div>
</section>
<section id="installation">
<h2>Installation<a class="headerlink" href="#installation" title="Lien vers cette rubrique"></a></h2>
<p>Lancez le script dinstallation fourni en tant que root :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> </span>/opt/dauphincraft
sudo<span class="w"> </span>bash<span class="w"> </span>install.sh
</pre></div>
</div>
<p>Ce script :</p>
<ol class="arabic simple">
<li><p>Crée un utilisateur système <code class="docutils literal notranslate"><span class="pre">dauphincraft</span></code>.</p></li>
<li><p>Installe le fichier de service systemd dans <code class="docutils literal notranslate"><span class="pre">/etc/systemd/system/dauphincraft.service</span></code>.</p></li>
<li><p>Active et démarre le service automatiquement.</p></li>
</ol>
</section>
<section id="verification-du-service">
<h2>Vérification du service<a class="headerlink" href="#verification-du-service" title="Lien vers cette rubrique"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>systemctl<span class="w"> </span>status<span class="w"> </span>dauphincraft
</pre></div>
</div>
<p>Une sortie de type <code class="docutils literal notranslate"><span class="pre">Active:</span> <span class="pre">active</span> <span class="pre">(running)</span></code> confirme que le serveur tourne correctement.</p>
</section>
<section id="ouverture-du-port-pare-feu">
<h2>Ouverture du port pare-feu<a class="headerlink" href="#ouverture-du-port-pare-feu" title="Lien vers cette rubrique"></a></h2>
<p>Avec <strong>ufw</strong> (Ubuntu) :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>ufw<span class="w"> </span>allow<span class="w"> </span><span class="m">7777</span>/udp
sudo<span class="w"> </span>ufw<span class="w"> </span>reload
</pre></div>
</div>
<p>Avec <strong>iptables</strong> :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>iptables<span class="w"> </span>-A<span class="w"> </span>INPUT<span class="w"> </span>-p<span class="w"> </span>udp<span class="w"> </span>--dport<span class="w"> </span><span class="m">7777</span><span class="w"> </span>-j<span class="w"> </span>ACCEPT
sudo<span class="w"> </span>iptables-save<span class="w"> </span>&gt;<span class="w"> </span>/etc/iptables/rules.v4
</pre></div>
</div>
</section>
<section id="consultation-des-logs">
<h2>Consultation des logs<a class="headerlink" href="#consultation-des-logs" title="Lien vers cette rubrique"></a></h2>
<p>Via <strong>journalctl</strong> (en temps réel) :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>journalctl<span class="w"> </span>-u<span class="w"> </span>dauphincraft<span class="w"> </span>-f
</pre></div>
</div>
<p>Via le fichier de log :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>tail<span class="w"> </span>-f<span class="w"> </span>/var/log/dauphincraft.log
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pied de page">
<a href="../joueur/multijoueur.html" class="btn btn-neutral float-left" title="Multijoueur" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Précédent</a>
<a href="configuration.html" class="btn btn-neutral float-right" title="Configuration du serveur" accesskey="n" rel="next">Suivant <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Droits d'auteur 2026, Baptiste Moulin.</p>
</div>
Compilé avec <a href="https://www.sphinx-doc.org/">Sphinx</a> en utilisant un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">thème</a>
fourni par <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

311
docs/_build/html/admin/maintenance.html vendored Normal file
View File

@@ -0,0 +1,311 @@
<!DOCTYPE html>
<html class="writer-html5" lang="fr" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Maintenance du serveur &mdash; DauphinCraft — Manuel joueur et serveur</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=897fae25"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/translations.js?v=e6b791cb"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Recherche" href="../search.html" />
<link rel="next" title="Architecture technique" href="../dev/architecture.html" />
<link rel="prev" title="Configuration du serveur" href="configuration.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #0b3d5c" >
<a href="../index.html" class="icon icon-home">
DauphinCraft
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Rechercher docs" aria-label="Rechercher docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Joueur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../joueur/installation.html">Installation — Guide joueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#configuration-minimale-requise">Configuration minimale requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#telechargement">Téléchargement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#depannage-antivirus">Dépannage antivirus</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#premiere-connexion">Première connexion</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/controles.html">Contrôles</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#deplacement">Déplacement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#capacites-speciales">Capacités spéciales</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interaction-avec-le-monde">Interaction avec le monde</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interface">Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#chat">Chat</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#menu-pause">Menu pause</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/mecaniques.html">Mécaniques de jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#jauges-du-joueur">Jauges du joueur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#gestion-de-l-oxygene">Gestion de loxygène</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#biomes-sous-marins">Biomes sous-marins</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mobs">Mobs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mort-et-respawn">Mort et respawn</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/craft.html">Crafting — Recettes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#comment-crafter">Comment crafter</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#recettes-disponibles">Recettes disponibles</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#lampe-bio">Lampe bio</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#harpon">Harpon</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#bulle-d-air">Bulle dair</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#algue-cuisinee">Algue cuisinée</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#armure-ecailles">Armure écailles</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#ressources-et-ou-les-trouver">Ressources et où les trouver</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/multijoueur.html">Multijoueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#modes-de-jeu">Modes de jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#port-reseau">Port réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#rejoindre-une-partie">Rejoindre une partie</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#heberger-depuis-le-jeu">Héberger depuis le jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#serveur-public-officiel">Serveur public officiel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#limite-de-joueurs">Limite de joueurs</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Administrateur serveur</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="installation_serveur.html">Installation du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#extraction-de-l-archive">Extraction de larchive</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#verification-du-service">Vérification du service</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#ouverture-du-port-pare-feu">Ouverture du port pare-feu</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation_serveur.html#consultation-des-logs">Consultation des logs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="configuration.html#fichier-de-service-systemd">Fichier de service systemd</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration.html#modifier-le-port-d-ecoute">Modifier le port découte</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration.html#nombre-maximum-de-joueurs">Nombre maximum de joueurs</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration.html#sauvegarde-du-monde">Sauvegarde du monde</a></li>
</ul>
</li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Maintenance du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#mise-a-jour-du-serveur">Mise à jour du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="#surveillance-et-logs">Surveillance et logs</a></li>
<li class="toctree-l2"><a class="reference internal" href="#verification-de-l-etat-du-serveur">Vérification de létat du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="#redemarrage-automatique">Redémarrage automatique</a></li>
<li class="toctree-l2"><a class="reference internal" href="#gestion-des-joueurs-kick-ban">Gestion des joueurs (Kick / Ban)</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Développement</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../dev/architecture.html">Architecture technique</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#moteur-et-langage">Moteur et langage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#architecture-reseau">Architecture réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#structure-du-projet">Structure du projet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#flux-de-demarrage">Flux de démarrage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/architecture.html#presets-d-export">Présets dexport</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../dev/modules.html">Modules du jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-monde-world">Module Monde (<code class="docutils literal notranslate"><span class="pre">world/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-dauphin-dolphin">Module Dauphin (<code class="docutils literal notranslate"><span class="pre">dolphin/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-ambiance-ambience">Module Ambiance (<code class="docutils literal notranslate"><span class="pre">ambience/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-inventaire-inventory">Module Inventaire (<code class="docutils literal notranslate"><span class="pre">inventory/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-mobs-mobs">Module Mobs (<code class="docutils literal notranslate"><span class="pre">mobs/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/modules.html#module-reseau-net">Module Réseau (<code class="docutils literal notranslate"><span class="pre">net/</span></code>)</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../dev/contribuer.html">Contribuer au projet</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#cloner-le-depot">Cloner le dépôt</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#ouvrir-le-projet-dans-godot">Ouvrir le projet dans Godot</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#build-et-export">Build et export</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#style-de-code">Style de code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#soumettre-une-contribution">Soumettre une contribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/contribuer.html#discussion-et-support">Discussion et support</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Annexes</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../credits.html">Crédits</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#moteur">Moteur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#assets">Assets</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#attribution-requise">Attribution requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#auteur-du-jeu">Auteur du jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#remerciements">Remerciements</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../changelog.html">Historique des versions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../changelog.html#version-0-1-0-sortie-initiale">Version 0.1.0 — Sortie initiale</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#nouvelles-fonctionnalites">Nouvelles fonctionnalités</a></li>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#limitations-connues">Limitations connues</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #0b3d5c" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">DauphinCraft</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Maintenance du serveur</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/admin/maintenance.rst.txt" rel="nofollow"> Afficher la source de la page</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="maintenance-du-serveur">
<h1>Maintenance du serveur<a class="headerlink" href="#maintenance-du-serveur" title="Lien vers cette rubrique"></a></h1>
<section id="mise-a-jour-du-serveur">
<h2>Mise à jour du serveur<a class="headerlink" href="#mise-a-jour-du-serveur" title="Lien vers cette rubrique"></a></h2>
<p>Pour mettre à jour DauphinCraft vers une nouvelle version :</p>
<ol class="arabic">
<li><p>Téléchargez le nouveau tarball depuis le dépôt officiel :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>wget<span class="w"> </span>http://&lt;gitea-host&gt;/dauphincraft/releases/download/vX.Y.Z/DauphinCraft-Server-vX.Y.Z.tar.gz
</pre></div>
</div>
</li>
<li><p>Arrêtez le service :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>systemctl<span class="w"> </span>stop<span class="w"> </span>dauphincraft
</pre></div>
</div>
</li>
<li><p>Sauvegardez lancienne version (optionnel mais recommandé) :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>cp<span class="w"> </span>-r<span class="w"> </span>/opt/dauphincraft<span class="w"> </span>/opt/dauphincraft.bak
</pre></div>
</div>
</li>
<li><p>Extrayez la nouvelle version :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>DauphinCraft-Server-vX.Y.Z.tar.gz<span class="w"> </span>-C<span class="w"> </span>/opt/
sudo<span class="w"> </span>rsync<span class="w"> </span>-a<span class="w"> </span>--exclude<span class="o">=</span><span class="s1">&#39;logs&#39;</span><span class="w"> </span>/opt/DauphinCraft-Server/<span class="w"> </span>/opt/dauphincraft/
</pre></div>
</div>
</li>
<li><p>Relancez le service :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>systemctl<span class="w"> </span>start<span class="w"> </span>dauphincraft
systemctl<span class="w"> </span>status<span class="w"> </span>dauphincraft
</pre></div>
</div>
</li>
</ol>
</section>
<section id="surveillance-et-logs">
<h2>Surveillance et logs<a class="headerlink" href="#surveillance-et-logs" title="Lien vers cette rubrique"></a></h2>
<p><strong>Consultation des logs en direct :</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>journalctl<span class="w"> </span>-u<span class="w"> </span>dauphincraft<span class="w"> </span>-f
</pre></div>
</div>
<p><strong>Consultation des dernières lignes :</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>tail<span class="w"> </span>-n<span class="w"> </span><span class="m">100</span><span class="w"> </span>/var/log/dauphincraft.log
</pre></div>
</div>
<p><strong>Rotation des logs :</strong> le service redirige stdout/stderr vers <code class="docutils literal notranslate"><span class="pre">/var/log/dauphincraft.log</span></code>.
Pour éviter que ce fichier grossisse indéfiniment, configurez <code class="docutils literal notranslate"><span class="pre">logrotate</span></code> :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>nano<span class="w"> </span>/etc/logrotate.d/dauphincraft
</pre></div>
</div>
<p>Contenu suggéré :</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>/var/log/dauphincraft.log {
daily
rotate 7
compress
missingok
notifempty
}
</pre></div>
</div>
</section>
<section id="verification-de-l-etat-du-serveur">
<h2>Vérification de létat du serveur<a class="headerlink" href="#verification-de-l-etat-du-serveur" title="Lien vers cette rubrique"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>systemctl<span class="w"> </span>is-active<span class="w"> </span>dauphincraft
</pre></div>
</div>
<p>Retourne <code class="docutils literal notranslate"><span class="pre">active</span></code> si le serveur est opérationnel, <code class="docutils literal notranslate"><span class="pre">failed</span></code> sinon.</p>
</section>
<section id="redemarrage-automatique">
<h2>Redémarrage automatique<a class="headerlink" href="#redemarrage-automatique" title="Lien vers cette rubrique"></a></h2>
<p>Le fichier de service inclut <code class="docutils literal notranslate"><span class="pre">Restart=on-failure</span></code> avec un délai de 5 secondes.
Le serveur redémarre donc automatiquement en cas de crash.</p>
</section>
<section id="gestion-des-joueurs-kick-ban">
<h2>Gestion des joueurs (Kick / Ban)<a class="headerlink" href="#gestion-des-joueurs-kick-ban" title="Lien vers cette rubrique"></a></h2>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Les commandes dadministration en jeu (kick, ban) sont prévues pour la version 0.2.0.
Aucune interface dadministration nest disponible dans la version actuelle.</p>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pied de page">
<a href="configuration.html" class="btn btn-neutral float-left" title="Configuration du serveur" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Précédent</a>
<a href="../dev/architecture.html" class="btn btn-neutral float-right" title="Architecture technique" accesskey="n" rel="next">Suivant <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Droits d'auteur 2026, Baptiste Moulin.</p>
</div>
Compilé avec <a href="https://www.sphinx-doc.org/">Sphinx</a> en utilisant un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">thème</a>
fourni par <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

295
docs/_build/html/changelog.html vendored Normal file
View File

@@ -0,0 +1,295 @@
<!DOCTYPE html>
<html class="writer-html5" lang="fr" data-content_root="./">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Historique des versions &mdash; DauphinCraft — Manuel joueur et serveur</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=9edc463e" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=897fae25"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/translations.js?v=e6b791cb"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Recherche" href="search.html" />
<link rel="prev" title="Crédits" href="credits.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #0b3d5c" >
<a href="index.html" class="icon icon-home">
DauphinCraft
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Rechercher docs" aria-label="Rechercher docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Joueur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="joueur/installation.html">Installation — Guide joueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#configuration-minimale-requise">Configuration minimale requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#telechargement">Téléchargement</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#depannage-antivirus">Dépannage antivirus</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#premiere-connexion">Première connexion</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="joueur/controles.html">Contrôles</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#deplacement">Déplacement</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#capacites-speciales">Capacités spéciales</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#interaction-avec-le-monde">Interaction avec le monde</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#interface">Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#chat">Chat</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#menu-pause">Menu pause</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="joueur/mecaniques.html">Mécaniques de jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#jauges-du-joueur">Jauges du joueur</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#gestion-de-l-oxygene">Gestion de loxygène</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#biomes-sous-marins">Biomes sous-marins</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#mobs">Mobs</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#mort-et-respawn">Mort et respawn</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="joueur/craft.html">Crafting — Recettes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/craft.html#comment-crafter">Comment crafter</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/craft.html#recettes-disponibles">Recettes disponibles</a><ul>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#lampe-bio">Lampe bio</a></li>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#harpon">Harpon</a></li>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#bulle-d-air">Bulle dair</a></li>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#algue-cuisinee">Algue cuisinée</a></li>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#armure-ecailles">Armure écailles</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="joueur/craft.html#ressources-et-ou-les-trouver">Ressources et où les trouver</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="joueur/multijoueur.html">Multijoueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#modes-de-jeu">Modes de jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#port-reseau">Port réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#rejoindre-une-partie">Rejoindre une partie</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#heberger-depuis-le-jeu">Héberger depuis le jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#serveur-public-officiel">Serveur public officiel</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#limite-de-joueurs">Limite de joueurs</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Administrateur serveur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="admin/installation_serveur.html">Installation du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#extraction-de-l-archive">Extraction de larchive</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#verification-du-service">Vérification du service</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#ouverture-du-port-pare-feu">Ouverture du port pare-feu</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#consultation-des-logs">Consultation des logs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin/configuration.html">Configuration du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="admin/configuration.html#fichier-de-service-systemd">Fichier de service systemd</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/configuration.html#modifier-le-port-d-ecoute">Modifier le port découte</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/configuration.html#nombre-maximum-de-joueurs">Nombre maximum de joueurs</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/configuration.html#sauvegarde-du-monde">Sauvegarde du monde</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin/maintenance.html">Maintenance du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#mise-a-jour-du-serveur">Mise à jour du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#surveillance-et-logs">Surveillance et logs</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#verification-de-l-etat-du-serveur">Vérification de létat du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#redemarrage-automatique">Redémarrage automatique</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#gestion-des-joueurs-kick-ban">Gestion des joueurs (Kick / Ban)</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Développement</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="dev/architecture.html">Architecture technique</a><ul>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#moteur-et-langage">Moteur et langage</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#architecture-reseau">Architecture réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#structure-du-projet">Structure du projet</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#flux-de-demarrage">Flux de démarrage</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#presets-d-export">Présets dexport</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/modules.html">Modules du jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-monde-world">Module Monde (<code class="docutils literal notranslate"><span class="pre">world/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-dauphin-dolphin">Module Dauphin (<code class="docutils literal notranslate"><span class="pre">dolphin/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-ambiance-ambience">Module Ambiance (<code class="docutils literal notranslate"><span class="pre">ambience/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-inventaire-inventory">Module Inventaire (<code class="docutils literal notranslate"><span class="pre">inventory/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-mobs-mobs">Module Mobs (<code class="docutils literal notranslate"><span class="pre">mobs/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-reseau-net">Module Réseau (<code class="docutils literal notranslate"><span class="pre">net/</span></code>)</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/contribuer.html">Contribuer au projet</a><ul>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#cloner-le-depot">Cloner le dépôt</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#ouvrir-le-projet-dans-godot">Ouvrir le projet dans Godot</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#build-et-export">Build et export</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#style-de-code">Style de code</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#soumettre-une-contribution">Soumettre une contribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#discussion-et-support">Discussion et support</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Annexes</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="credits.html">Crédits</a><ul>
<li class="toctree-l2"><a class="reference internal" href="credits.html#moteur">Moteur</a></li>
<li class="toctree-l2"><a class="reference internal" href="credits.html#assets">Assets</a></li>
<li class="toctree-l2"><a class="reference internal" href="credits.html#attribution-requise">Attribution requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="credits.html#auteur-du-jeu">Auteur du jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="credits.html#remerciements">Remerciements</a></li>
</ul>
</li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Historique des versions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#version-0-1-0-sortie-initiale">Version 0.1.0 — Sortie initiale</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#nouvelles-fonctionnalites">Nouvelles fonctionnalités</a></li>
<li class="toctree-l3"><a class="reference internal" href="#limitations-connues">Limitations connues</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #0b3d5c" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">DauphinCraft</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Historique des versions</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/changelog.rst.txt" rel="nofollow"> Afficher la source de la page</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="historique-des-versions">
<h1>Historique des versions<a class="headerlink" href="#historique-des-versions" title="Lien vers cette rubrique"></a></h1>
<section id="version-0-1-0-sortie-initiale">
<h2>Version 0.1.0 — Sortie initiale<a class="headerlink" href="#version-0-1-0-sortie-initiale" title="Lien vers cette rubrique"></a></h2>
<p><em>Avril 2026</em></p>
<p>Première version publique de DauphinCraft. Cette version pose les bases du jeu :
monde voxel procédural, gameplay dauphin, inventaire, mobs et multijoueur.</p>
<section id="nouvelles-fonctionnalites">
<h3>Nouvelles fonctionnalités<a class="headerlink" href="#nouvelles-fonctionnalites" title="Lien vers cette rubrique"></a></h3>
<ul class="simple">
<li><p><strong>Monde voxel procédural sous-marin</strong></p>
<ul>
<li><p>Génération par bruit de Perlin multi-octave.</p></li>
<li><p>Quatre biomes : récif corallien, forêt de kelp, abysses, épaves.</p></li>
<li><p>Chunks 16×16×16 chargés dynamiquement autour du joueur.</p></li>
<li><p>Six types de blocs : Corail Bleu, Corail Rouge, Kelp, Roche, Épave, Glace.</p></li>
</ul>
</li>
<li><p><strong>Dauphin contrôleur et HUD</strong></p>
<ul>
<li><p>Déplacement 6DOF (haut/bas/avant/arrière/strafes).</p></li>
<li><p>Jauges : oxygène, vie, faim.</p></li>
<li><p>Boost de nage et écholocation (révèle lenvironnement dans un rayon de 20 unités).</p></li>
<li><p>Hotbar de 9 slots.</p></li>
</ul>
</li>
<li><p><strong>Inventaire et crafting</strong></p>
<ul>
<li><p>Inventaire de 27 slots.</p></li>
<li><p>5 recettes de craft : Lampe bio, Harpon, Bulle dair, Algue cuisinée, Armure écailles.</p></li>
</ul>
</li>
<li><p><strong>Mobs (3 types)</strong></p>
<ul>
<li><p>Bancs de poissons (boids, neutres).</p></li>
<li><p>Méduses (dégâts de contact passifs).</p></li>
<li><p>Requin (hostile, réagit à lécholocation).</p></li>
<li><p>Spawner par biome avec limite de population.</p></li>
</ul>
</li>
<li><p><strong>Multijoueur ENet 16 joueurs</strong></p>
<ul>
<li><p>Architecture autorité serveur.</p></li>
<li><p>Synchronisation position, blocs, inventaire.</p></li>
<li><p>Chat textuel en jeu.</p></li>
<li><p>Serveur dédié headless pour Linux.</p></li>
</ul>
</li>
<li><p><strong>Ambiance visuelle et audio</strong></p>
<ul>
<li><p>Shaders sous-marins : fog volumétrique, diffusion lumineuse.</p></li>
<li><p>Particules de plancton lumineux.</p></li>
<li><p>Musique : <em>Underwater Theme</em> (Cleyton RX, CC-BY 3.0).</p></li>
<li><p>Effets sonores : ambiance, bulles, chant de baleine (CC0).</p></li>
</ul>
</li>
</ul>
</section>
<section id="limitations-connues">
<h3>Limitations connues<a class="headerlink" href="#limitations-connues" title="Lien vers cette rubrique"></a></h3>
<ul class="simple">
<li><p>La sauvegarde du monde nest pas persistante (monde régénéré à chaque redémarrage).</p></li>
<li><p>Pas de commandes dadministration en jeu (kick/ban prévu en 0.2.0).</p></li>
<li><p>La limite de joueurs (16) nest pas configurable en ligne de commande.</p></li>
</ul>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pied de page">
<a href="credits.html" class="btn btn-neutral float-left" title="Crédits" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Précédent</a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Droits d'auteur 2026, Baptiste Moulin.</p>
</div>
Compilé avec <a href="https://www.sphinx-doc.org/">Sphinx</a> en utilisant un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">thème</a>
fourni par <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

298
docs/_build/html/credits.html vendored Normal file
View File

@@ -0,0 +1,298 @@
<!DOCTYPE html>
<html class="writer-html5" lang="fr" data-content_root="./">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Crédits &mdash; DauphinCraft — Manuel joueur et serveur</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=9edc463e" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=897fae25"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/translations.js?v=e6b791cb"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Recherche" href="search.html" />
<link rel="next" title="Historique des versions" href="changelog.html" />
<link rel="prev" title="Contribuer au projet" href="dev/contribuer.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #0b3d5c" >
<a href="index.html" class="icon icon-home">
DauphinCraft
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Rechercher docs" aria-label="Rechercher docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Joueur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="joueur/installation.html">Installation — Guide joueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#configuration-minimale-requise">Configuration minimale requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#telechargement">Téléchargement</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#depannage-antivirus">Dépannage antivirus</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/installation.html#premiere-connexion">Première connexion</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="joueur/controles.html">Contrôles</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#deplacement">Déplacement</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#capacites-speciales">Capacités spéciales</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#interaction-avec-le-monde">Interaction avec le monde</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#interface">Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#chat">Chat</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/controles.html#menu-pause">Menu pause</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="joueur/mecaniques.html">Mécaniques de jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#jauges-du-joueur">Jauges du joueur</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#gestion-de-l-oxygene">Gestion de loxygène</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#biomes-sous-marins">Biomes sous-marins</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#mobs">Mobs</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/mecaniques.html#mort-et-respawn">Mort et respawn</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="joueur/craft.html">Crafting — Recettes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/craft.html#comment-crafter">Comment crafter</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/craft.html#recettes-disponibles">Recettes disponibles</a><ul>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#lampe-bio">Lampe bio</a></li>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#harpon">Harpon</a></li>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#bulle-d-air">Bulle dair</a></li>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#algue-cuisinee">Algue cuisinée</a></li>
<li class="toctree-l3"><a class="reference internal" href="joueur/craft.html#armure-ecailles">Armure écailles</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="joueur/craft.html#ressources-et-ou-les-trouver">Ressources et où les trouver</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="joueur/multijoueur.html">Multijoueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#modes-de-jeu">Modes de jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#port-reseau">Port réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#rejoindre-une-partie">Rejoindre une partie</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#heberger-depuis-le-jeu">Héberger depuis le jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#serveur-public-officiel">Serveur public officiel</a></li>
<li class="toctree-l2"><a class="reference internal" href="joueur/multijoueur.html#limite-de-joueurs">Limite de joueurs</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Administrateur serveur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="admin/installation_serveur.html">Installation du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#extraction-de-l-archive">Extraction de larchive</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#verification-du-service">Vérification du service</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#ouverture-du-port-pare-feu">Ouverture du port pare-feu</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/installation_serveur.html#consultation-des-logs">Consultation des logs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin/configuration.html">Configuration du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="admin/configuration.html#fichier-de-service-systemd">Fichier de service systemd</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/configuration.html#modifier-le-port-d-ecoute">Modifier le port découte</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/configuration.html#nombre-maximum-de-joueurs">Nombre maximum de joueurs</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/configuration.html#sauvegarde-du-monde">Sauvegarde du monde</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin/maintenance.html">Maintenance du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#mise-a-jour-du-serveur">Mise à jour du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#surveillance-et-logs">Surveillance et logs</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#verification-de-l-etat-du-serveur">Vérification de létat du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#redemarrage-automatique">Redémarrage automatique</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin/maintenance.html#gestion-des-joueurs-kick-ban">Gestion des joueurs (Kick / Ban)</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Développement</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="dev/architecture.html">Architecture technique</a><ul>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#moteur-et-langage">Moteur et langage</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#architecture-reseau">Architecture réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#structure-du-projet">Structure du projet</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#flux-de-demarrage">Flux de démarrage</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/architecture.html#presets-d-export">Présets dexport</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/modules.html">Modules du jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-monde-world">Module Monde (<code class="docutils literal notranslate"><span class="pre">world/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-dauphin-dolphin">Module Dauphin (<code class="docutils literal notranslate"><span class="pre">dolphin/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-ambiance-ambience">Module Ambiance (<code class="docutils literal notranslate"><span class="pre">ambience/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-inventaire-inventory">Module Inventaire (<code class="docutils literal notranslate"><span class="pre">inventory/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-mobs-mobs">Module Mobs (<code class="docutils literal notranslate"><span class="pre">mobs/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/modules.html#module-reseau-net">Module Réseau (<code class="docutils literal notranslate"><span class="pre">net/</span></code>)</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/contribuer.html">Contribuer au projet</a><ul>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#cloner-le-depot">Cloner le dépôt</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#ouvrir-le-projet-dans-godot">Ouvrir le projet dans Godot</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#build-et-export">Build et export</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#style-de-code">Style de code</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#soumettre-une-contribution">Soumettre une contribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="dev/contribuer.html#discussion-et-support">Discussion et support</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Annexes</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Crédits</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#moteur">Moteur</a></li>
<li class="toctree-l2"><a class="reference internal" href="#assets">Assets</a></li>
<li class="toctree-l2"><a class="reference internal" href="#attribution-requise">Attribution requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="#auteur-du-jeu">Auteur du jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="#remerciements">Remerciements</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Historique des versions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="changelog.html#version-0-1-0-sortie-initiale">Version 0.1.0 — Sortie initiale</a><ul>
<li class="toctree-l3"><a class="reference internal" href="changelog.html#nouvelles-fonctionnalites">Nouvelles fonctionnalités</a></li>
<li class="toctree-l3"><a class="reference internal" href="changelog.html#limitations-connues">Limitations connues</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #0b3d5c" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">DauphinCraft</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Crédits</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/credits.rst.txt" rel="nofollow"> Afficher la source de la page</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="credits">
<h1>Crédits<a class="headerlink" href="#credits" title="Lien vers cette rubrique"></a></h1>
<section id="moteur">
<h2>Moteur<a class="headerlink" href="#moteur" title="Lien vers cette rubrique"></a></h2>
<ul class="simple">
<li><p><strong>Godot Engine 4.6.2</strong> — Licence MIT — <a class="reference external" href="https://godotengine.org">https://godotengine.org</a></p></li>
</ul>
</section>
<section id="assets">
<h2>Assets<a class="headerlink" href="#assets" title="Lien vers cette rubrique"></a></h2>
<p>Tous les assets sont listés ci-dessous avec leur source et licence.</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Asset</p></th>
<th class="head"><p>Source</p></th>
<th class="head"><p>Licence</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">icon.svg</span></code></p></td>
<td><p>Créé manuellement</p></td>
<td><p>CC0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">audio/music/underwater_theme</span></code></p></td>
<td><p>Cleyton RX — <a class="reference external" href="https://opengameart.org/content/">https://opengameart.org/content/</a>
underwater-theme</p></td>
<td><p>CC-BY 3.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">audio/sfx/underwater_ambient</span></code></p></td>
<td><p>Zozzy — <a class="reference external" href="https://freesound.org/people/Zozzy/">https://freesound.org/people/Zozzy/</a>
sounds/56678/</p></td>
<td><p>CC0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">audio/sfx/bubbles</span></code></p></td>
<td><p>ristooooo1 — <a class="reference external" href="https://freesound.org/people/">https://freesound.org/people/</a>
ristooooo1/sounds/539823/</p></td>
<td><p>CC0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">audio/sfx/whale_call</span></code></p></td>
<td><p>taure — <a class="reference external" href="https://freesound.org/people/taure/">https://freesound.org/people/taure/</a>
sounds/361423/</p></td>
<td><p>CC0</p></td>
</tr>
</tbody>
</table>
</section>
<section id="attribution-requise">
<h2>Attribution requise<a class="headerlink" href="#attribution-requise" title="Lien vers cette rubrique"></a></h2>
<p>Conformément à la licence CC-BY 3.0, la musique de fond doit être créditée ainsi :</p>
<blockquote>
<div><p><em>« Underwater Theme » par Cleyton RX,</em>
<em>https://opengameart.org/content/underwater-theme,</em>
<em>sous licence Creative Commons Attribution 3.0.</em></p>
</div></blockquote>
</section>
<section id="auteur-du-jeu">
<h2>Auteur du jeu<a class="headerlink" href="#auteur-du-jeu" title="Lien vers cette rubrique"></a></h2>
<ul class="simple">
<li><p><strong>Baptiste Moulin</strong> — Conception, développement, direction artistique</p></li>
</ul>
</section>
<section id="remerciements">
<h2>Remerciements<a class="headerlink" href="#remerciements" title="Lien vers cette rubrique"></a></h2>
<ul class="simple">
<li><p>La communauté Godot Engine pour ses ressources et son support.</p></li>
<li><p>Les créateurs dassets CC0 et CC-BY qui rendent les projets open source possibles.</p></li>
</ul>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pied de page">
<a href="dev/contribuer.html" class="btn btn-neutral float-left" title="Contribuer au projet" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Précédent</a>
<a href="changelog.html" class="btn btn-neutral float-right" title="Historique des versions" accesskey="n" rel="next">Suivant <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Droits d'auteur 2026, Baptiste Moulin.</p>
</div>
Compilé avec <a href="https://www.sphinx-doc.org/">Sphinx</a> en utilisant un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">thème</a>
fourni par <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

320
docs/_build/html/dev/architecture.html vendored Normal file
View File

@@ -0,0 +1,320 @@
<!DOCTYPE html>
<html class="writer-html5" lang="fr" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Architecture technique &mdash; DauphinCraft — Manuel joueur et serveur</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=897fae25"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/translations.js?v=e6b791cb"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Recherche" href="../search.html" />
<link rel="next" title="Modules du jeu" href="modules.html" />
<link rel="prev" title="Maintenance du serveur" href="../admin/maintenance.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #0b3d5c" >
<a href="../index.html" class="icon icon-home">
DauphinCraft
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Rechercher docs" aria-label="Rechercher docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Joueur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../joueur/installation.html">Installation — Guide joueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#configuration-minimale-requise">Configuration minimale requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#telechargement">Téléchargement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#depannage-antivirus">Dépannage antivirus</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#premiere-connexion">Première connexion</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/controles.html">Contrôles</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#deplacement">Déplacement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#capacites-speciales">Capacités spéciales</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interaction-avec-le-monde">Interaction avec le monde</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interface">Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#chat">Chat</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#menu-pause">Menu pause</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/mecaniques.html">Mécaniques de jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#jauges-du-joueur">Jauges du joueur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#gestion-de-l-oxygene">Gestion de loxygène</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#biomes-sous-marins">Biomes sous-marins</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mobs">Mobs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mort-et-respawn">Mort et respawn</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/craft.html">Crafting — Recettes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#comment-crafter">Comment crafter</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#recettes-disponibles">Recettes disponibles</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#lampe-bio">Lampe bio</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#harpon">Harpon</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#bulle-d-air">Bulle dair</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#algue-cuisinee">Algue cuisinée</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#armure-ecailles">Armure écailles</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#ressources-et-ou-les-trouver">Ressources et où les trouver</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/multijoueur.html">Multijoueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#modes-de-jeu">Modes de jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#port-reseau">Port réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#rejoindre-une-partie">Rejoindre une partie</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#heberger-depuis-le-jeu">Héberger depuis le jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#serveur-public-officiel">Serveur public officiel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#limite-de-joueurs">Limite de joueurs</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Administrateur serveur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../admin/installation_serveur.html">Installation du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#extraction-de-l-archive">Extraction de larchive</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#verification-du-service">Vérification du service</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#ouverture-du-port-pare-feu">Ouverture du port pare-feu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#consultation-des-logs">Consultation des logs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../admin/configuration.html">Configuration du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../admin/configuration.html#fichier-de-service-systemd">Fichier de service systemd</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/configuration.html#modifier-le-port-d-ecoute">Modifier le port découte</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/configuration.html#nombre-maximum-de-joueurs">Nombre maximum de joueurs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/configuration.html#sauvegarde-du-monde">Sauvegarde du monde</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../admin/maintenance.html">Maintenance du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#mise-a-jour-du-serveur">Mise à jour du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#surveillance-et-logs">Surveillance et logs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#verification-de-l-etat-du-serveur">Vérification de létat du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#redemarrage-automatique">Redémarrage automatique</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#gestion-des-joueurs-kick-ban">Gestion des joueurs (Kick / Ban)</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Développement</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Architecture technique</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#moteur-et-langage">Moteur et langage</a></li>
<li class="toctree-l2"><a class="reference internal" href="#architecture-reseau">Architecture réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="#structure-du-projet">Structure du projet</a></li>
<li class="toctree-l2"><a class="reference internal" href="#flux-de-demarrage">Flux de démarrage</a></li>
<li class="toctree-l2"><a class="reference internal" href="#presets-d-export">Présets dexport</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">Modules du jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-monde-world">Module Monde (<code class="docutils literal notranslate"><span class="pre">world/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-dauphin-dolphin">Module Dauphin (<code class="docutils literal notranslate"><span class="pre">dolphin/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-ambiance-ambience">Module Ambiance (<code class="docutils literal notranslate"><span class="pre">ambience/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-inventaire-inventory">Module Inventaire (<code class="docutils literal notranslate"><span class="pre">inventory/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-mobs-mobs">Module Mobs (<code class="docutils literal notranslate"><span class="pre">mobs/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-reseau-net">Module Réseau (<code class="docutils literal notranslate"><span class="pre">net/</span></code>)</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="contribuer.html">Contribuer au projet</a><ul>
<li class="toctree-l2"><a class="reference internal" href="contribuer.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="contribuer.html#cloner-le-depot">Cloner le dépôt</a></li>
<li class="toctree-l2"><a class="reference internal" href="contribuer.html#ouvrir-le-projet-dans-godot">Ouvrir le projet dans Godot</a></li>
<li class="toctree-l2"><a class="reference internal" href="contribuer.html#build-et-export">Build et export</a></li>
<li class="toctree-l2"><a class="reference internal" href="contribuer.html#style-de-code">Style de code</a></li>
<li class="toctree-l2"><a class="reference internal" href="contribuer.html#soumettre-une-contribution">Soumettre une contribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="contribuer.html#discussion-et-support">Discussion et support</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Annexes</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../credits.html">Crédits</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#moteur">Moteur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#assets">Assets</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#attribution-requise">Attribution requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#auteur-du-jeu">Auteur du jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#remerciements">Remerciements</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../changelog.html">Historique des versions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../changelog.html#version-0-1-0-sortie-initiale">Version 0.1.0 — Sortie initiale</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#nouvelles-fonctionnalites">Nouvelles fonctionnalités</a></li>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#limitations-connues">Limitations connues</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #0b3d5c" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">DauphinCraft</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Architecture technique</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/dev/architecture.rst.txt" rel="nofollow"> Afficher la source de la page</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="architecture-technique">
<h1>Architecture technique<a class="headerlink" href="#architecture-technique" title="Lien vers cette rubrique"></a></h1>
<section id="moteur-et-langage">
<h2>Moteur et langage<a class="headerlink" href="#moteur-et-langage" title="Lien vers cette rubrique"></a></h2>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Composant</p></th>
<th class="head"><p>Valeur</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Moteur</p></td>
<td><p>Godot Engine 4.6.2 (Forward+)</p></td>
</tr>
<tr class="row-odd"><td><p>Langage</p></td>
<td><p>GDScript (typage strict)</p></td>
</tr>
<tr class="row-even"><td><p>Rendu</p></td>
<td><p>Vulkan (Forward+) / Compatibility (fallback)</p></td>
</tr>
<tr class="row-odd"><td><p>Réseau</p></td>
<td><p>ENet UDP, autorité serveur</p></td>
</tr>
</tbody>
</table>
</section>
<section id="architecture-reseau">
<h2>Architecture réseau<a class="headerlink" href="#architecture-reseau" title="Lien vers cette rubrique"></a></h2>
<p>DauphinCraft utilise un modèle <strong>autorité serveur</strong> :</p>
<ul class="simple">
<li><p>Le serveur est la source de vérité pour les positions, les blocs et les inventaires.</p></li>
<li><p>Les clients envoient leurs intentions (déplacement, action) et reçoivent létat du monde.</p></li>
<li><p>La synchronisation est assurée par <code class="docutils literal notranslate"><span class="pre">PlayerSyncComponent</span></code> et <code class="docutils literal notranslate"><span class="pre">WorldSyncComponent</span></code>.</p></li>
<li><p>Le protocole de transport est <strong>ENet (UDP)</strong> via la couche haut niveau Godot (<code class="docutils literal notranslate"><span class="pre">MultiplayerAPI</span></code>).</p></li>
<li><p>Port par défaut : <strong>UDP 7777</strong>.</p></li>
</ul>
</section>
<section id="structure-du-projet">
<h2>Structure du projet<a class="headerlink" href="#structure-du-projet" title="Lien vers cette rubrique"></a></h2>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>DauphinCraft/
├── project.godot # Fichier de projet Godot
├── icon.svg # Icône du jeu
├── export_presets.cfg # Présets d&#39;export (Windows, Linux serveur)
├── assets/ # Ressources visuelles (textures, modèles)
├── audio/ # Fichiers audio
│ ├── music/ # Musiques de fond
│ └── sfx/ # Effets sonores
├── builds/ # Sorties d&#39;export
├── scenes/ # Scènes Godot (.tscn)
│ ├── Main.tscn
│ ├── MainMenu.tscn
│ ├── LobbyMenu.tscn
│ ├── World.tscn
│ ├── Dolphin.tscn
│ ├── InventoryUI.tscn
│ ├── PauseMenu.tscn
│ └── mobs/
├── scripts/ # Scripts GDScript (.gd)
│ ├── Main.gd
│ ├── PauseMenu.gd
│ ├── world/ # Gestion du monde voxel
│ ├── dolphin/ # Contrôleur joueur + HUD
│ ├── ambience/ # Environnement visuel et audio
│ ├── inventory/ # Inventaire et crafting
│ ├── mobs/ # Intelligence artificielle des mobs
│ └── net/ # Réseau multijoueur
├── shaders/ # Shaders GLSL/Godot
└── docs/ # Documentation Sphinx (ce manuel)
</pre></div>
</div>
</section>
<section id="flux-de-demarrage">
<h2>Flux de démarrage<a class="headerlink" href="#flux-de-demarrage" title="Lien vers cette rubrique"></a></h2>
<ol class="arabic simple">
<li><p><code class="docutils literal notranslate"><span class="pre">Main.tscn</span></code> est la scène principale. Elle instancie <code class="docutils literal notranslate"><span class="pre">MainMenu.tscn</span></code>.</p></li>
<li><p>Le joueur choisit Solo / Héberger / Rejoindre dans <code class="docutils literal notranslate"><span class="pre">LobbyMenu.tscn</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">NetworkManager</span></code> initialise ENet (serveur ou client).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">World.tscn</span></code> est chargée : <code class="docutils literal notranslate"><span class="pre">ChunkManager</span></code> génère les premiers chunks.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Dolphin.tscn</span></code> est instanciée pour chaque joueur connecté.</p></li>
<li><p>La boucle de jeu tourne : physique, synchronisation réseau, rendu.</p></li>
</ol>
</section>
<section id="presets-d-export">
<h2>Présets dexport<a class="headerlink" href="#presets-d-export" title="Lien vers cette rubrique"></a></h2>
<p>Deux présets sont configurés dans <code class="docutils literal notranslate"><span class="pre">export_presets.cfg</span></code> :</p>
<ul class="simple">
<li><p><strong>Windows (64 bits)</strong> : exécutable joueur pour Windows.</p></li>
<li><p><strong>Linux Server (64 bits)</strong> : exécutable headless pour serveur dédié Linux.</p></li>
</ul>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pied de page">
<a href="../admin/maintenance.html" class="btn btn-neutral float-left" title="Maintenance du serveur" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Précédent</a>
<a href="modules.html" class="btn btn-neutral float-right" title="Modules du jeu" accesskey="n" rel="next">Suivant <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Droits d'auteur 2026, Baptiste Moulin.</p>
</div>
Compilé avec <a href="https://www.sphinx-doc.org/">Sphinx</a> en utilisant un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">thème</a>
fourni par <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

334
docs/_build/html/dev/contribuer.html vendored Normal file
View File

@@ -0,0 +1,334 @@
<!DOCTYPE html>
<html class="writer-html5" lang="fr" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Contribuer au projet &mdash; DauphinCraft — Manuel joueur et serveur</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=897fae25"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/translations.js?v=e6b791cb"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Recherche" href="../search.html" />
<link rel="next" title="Crédits" href="../credits.html" />
<link rel="prev" title="Modules du jeu" href="modules.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #0b3d5c" >
<a href="../index.html" class="icon icon-home">
DauphinCraft
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Rechercher docs" aria-label="Rechercher docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Joueur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../joueur/installation.html">Installation — Guide joueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#configuration-minimale-requise">Configuration minimale requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#telechargement">Téléchargement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#procedure-d-installation">Procédure dinstallation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#depannage-antivirus">Dépannage antivirus</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/installation.html#premiere-connexion">Première connexion</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/controles.html">Contrôles</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#deplacement">Déplacement</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#capacites-speciales">Capacités spéciales</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interaction-avec-le-monde">Interaction avec le monde</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#interface">Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#chat">Chat</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/controles.html#menu-pause">Menu pause</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/mecaniques.html">Mécaniques de jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#jauges-du-joueur">Jauges du joueur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#gestion-de-l-oxygene">Gestion de loxygène</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#biomes-sous-marins">Biomes sous-marins</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mobs">Mobs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/mecaniques.html#mort-et-respawn">Mort et respawn</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/craft.html">Crafting — Recettes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#comment-crafter">Comment crafter</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#recettes-disponibles">Recettes disponibles</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#lampe-bio">Lampe bio</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#harpon">Harpon</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#bulle-d-air">Bulle dair</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#algue-cuisinee">Algue cuisinée</a></li>
<li class="toctree-l3"><a class="reference internal" href="../joueur/craft.html#armure-ecailles">Armure écailles</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/craft.html#ressources-et-ou-les-trouver">Ressources et où les trouver</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../joueur/multijoueur.html">Multijoueur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#modes-de-jeu">Modes de jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#port-reseau">Port réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#rejoindre-une-partie">Rejoindre une partie</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#heberger-depuis-le-jeu">Héberger depuis le jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#serveur-public-officiel">Serveur public officiel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../joueur/multijoueur.html#limite-de-joueurs">Limite de joueurs</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Administrateur serveur</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../admin/installation_serveur.html">Installation du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#prerequis">Prérequis</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#extraction-de-l-archive">Extraction de larchive</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#verification-du-service">Vérification du service</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#ouverture-du-port-pare-feu">Ouverture du port pare-feu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/installation_serveur.html#consultation-des-logs">Consultation des logs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../admin/configuration.html">Configuration du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../admin/configuration.html#fichier-de-service-systemd">Fichier de service systemd</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/configuration.html#modifier-le-port-d-ecoute">Modifier le port découte</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/configuration.html#nombre-maximum-de-joueurs">Nombre maximum de joueurs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/configuration.html#sauvegarde-du-monde">Sauvegarde du monde</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../admin/maintenance.html">Maintenance du serveur</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#mise-a-jour-du-serveur">Mise à jour du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#surveillance-et-logs">Surveillance et logs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#verification-de-l-etat-du-serveur">Vérification de létat du serveur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#redemarrage-automatique">Redémarrage automatique</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/maintenance.html#gestion-des-joueurs-kick-ban">Gestion des joueurs (Kick / Ban)</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Développement</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="architecture.html">Architecture technique</a><ul>
<li class="toctree-l2"><a class="reference internal" href="architecture.html#moteur-et-langage">Moteur et langage</a></li>
<li class="toctree-l2"><a class="reference internal" href="architecture.html#architecture-reseau">Architecture réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="architecture.html#structure-du-projet">Structure du projet</a></li>
<li class="toctree-l2"><a class="reference internal" href="architecture.html#flux-de-demarrage">Flux de démarrage</a></li>
<li class="toctree-l2"><a class="reference internal" href="architecture.html#presets-d-export">Présets dexport</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">Modules du jeu</a><ul>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-monde-world">Module Monde (<code class="docutils literal notranslate"><span class="pre">world/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-dauphin-dolphin">Module Dauphin (<code class="docutils literal notranslate"><span class="pre">dolphin/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-ambiance-ambience">Module Ambiance (<code class="docutils literal notranslate"><span class="pre">ambience/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-inventaire-inventory">Module Inventaire (<code class="docutils literal notranslate"><span class="pre">inventory/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-mobs-mobs">Module Mobs (<code class="docutils literal notranslate"><span class="pre">mobs/</span></code>)</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#module-reseau-net">Module Réseau (<code class="docutils literal notranslate"><span class="pre">net/</span></code>)</a></li>
</ul>
</li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Contribuer au projet</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#outils-necessaires">Outils nécessaires</a></li>
<li class="toctree-l2"><a class="reference internal" href="#cloner-le-depot">Cloner le dépôt</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ouvrir-le-projet-dans-godot">Ouvrir le projet dans Godot</a></li>
<li class="toctree-l2"><a class="reference internal" href="#build-et-export">Build et export</a></li>
<li class="toctree-l2"><a class="reference internal" href="#style-de-code">Style de code</a></li>
<li class="toctree-l2"><a class="reference internal" href="#soumettre-une-contribution">Soumettre une contribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="#discussion-et-support">Discussion et support</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Annexes</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../credits.html">Crédits</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#moteur">Moteur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#assets">Assets</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#attribution-requise">Attribution requise</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#auteur-du-jeu">Auteur du jeu</a></li>
<li class="toctree-l2"><a class="reference internal" href="../credits.html#remerciements">Remerciements</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../changelog.html">Historique des versions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../changelog.html#version-0-1-0-sortie-initiale">Version 0.1.0 — Sortie initiale</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#nouvelles-fonctionnalites">Nouvelles fonctionnalités</a></li>
<li class="toctree-l3"><a class="reference internal" href="../changelog.html#limitations-connues">Limitations connues</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #0b3d5c" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">DauphinCraft</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Contribuer au projet</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/dev/contribuer.rst.txt" rel="nofollow"> Afficher la source de la page</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="contribuer-au-projet">
<h1>Contribuer au projet<a class="headerlink" href="#contribuer-au-projet" title="Lien vers cette rubrique"></a></h1>
<section id="outils-necessaires">
<h2>Outils nécessaires<a class="headerlink" href="#outils-necessaires" title="Lien vers cette rubrique"></a></h2>
<ul class="simple">
<li><p><strong>Godot Engine 4.6.2</strong> : téléchargez depuis <a class="reference external" href="https://godotengine.org/download">https://godotengine.org/download</a></p></li>
<li><p><strong>Git</strong> : version 2.x ou supérieure</p></li>
<li><p>Accès au dépôt Gitea de DauphinCraft</p></li>
</ul>
</section>
<section id="cloner-le-depot">
<h2>Cloner le dépôt<a class="headerlink" href="#cloner-le-depot" title="Lien vers cette rubrique"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git<span class="w"> </span>clone<span class="w"> </span>http://&lt;gitea-host&gt;/dauphincraft/dauphincraft.git
<span class="nb">cd</span><span class="w"> </span>dauphincraft
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Remplacez <code class="docutils literal notranslate"><span class="pre">&lt;gitea-host&gt;</span></code> par ladresse du serveur Gitea communautaire.</p>
</div>
</section>
<section id="ouvrir-le-projet-dans-godot">
<h2>Ouvrir le projet dans Godot<a class="headerlink" href="#ouvrir-le-projet-dans-godot" title="Lien vers cette rubrique"></a></h2>
<ol class="arabic simple">
<li><p>Lancez Godot Engine 4.6.2.</p></li>
<li><p>Dans le gestionnaire de projets, cliquez sur <strong>Import</strong>.</p></li>
<li><p>Naviguez jusquau dossier cloné et sélectionnez <code class="docutils literal notranslate"><span class="pre">project.godot</span></code>.</p></li>
<li><p>Cliquez sur <strong>Import &amp; Edit</strong>.</p></li>
</ol>
<p>Le projet souvre directement dans léditeur. Appuyez sur <strong>F5</strong> pour lancer le jeu en mode éditeur.</p>
</section>
<section id="build-et-export">
<h2>Build et export<a class="headerlink" href="#build-et-export" title="Lien vers cette rubrique"></a></h2>
<p>Les présets dexport sont configurés dans <code class="docutils literal notranslate"><span class="pre">export_presets.cfg</span></code>.</p>
<p><strong>Exporter pour Windows :</strong></p>
<ol class="arabic simple">
<li><p>Menu <strong>Projet → Exporter</strong>.</p></li>
<li><p>Sélectionnez le préset <strong>Windows Desktop</strong>.</p></li>
<li><p>Cliquez sur <strong>Exporter le projet</strong> et choisissez un dossier de sortie.</p></li>
</ol>
<p><strong>Exporter le serveur Linux :</strong></p>
<ol class="arabic simple">
<li><p>Menu <strong>Projet → Exporter</strong>.</p></li>
<li><p>Sélectionnez le préset <strong>Linux Server</strong>.</p></li>
<li><p>Cliquez sur <strong>Exporter le projet</strong>.</p></li>
</ol>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Pour exporter vers Linux, vous devez avoir installé le template dexport Linux dans Godot
(<strong>Éditeur → Gérer les modèles dexportation</strong>).</p>
</div>
</section>
<section id="style-de-code">
<h2>Style de code<a class="headerlink" href="#style-de-code" title="Lien vers cette rubrique"></a></h2>
<ul class="simple">
<li><p><strong>Typage strict</strong> : déclarez toujours les types explicitement (<code class="docutils literal notranslate"><span class="pre">var</span> <span class="pre">x:</span> <span class="pre">int</span> <span class="pre">=</span> <span class="pre">0</span></code>).</p></li>
<li><p><strong>Pas de TODO</strong> laissé dans le code soumis — ouvrez une issue à la place.</p></li>
<li><p><strong>Nommage</strong> : <code class="docutils literal notranslate"><span class="pre">snake_case</span></code> pour les variables et fonctions, <code class="docutils literal notranslate"><span class="pre">PascalCase</span></code> pour les classes.</p></li>
<li><p><strong>Commentaires</strong> : en français, concis.</p></li>
<li><p><strong>Signals</strong> : préfixez les signaux avec le nom du composant (<code class="docutils literal notranslate"><span class="pre">dolphin_died</span></code>, <code class="docutils literal notranslate"><span class="pre">chunk_loaded</span></code>).</p></li>
</ul>
<p>Exemple de code conforme :</p>
<div class="highlight-gdscript notranslate"><div class="highlight"><pre><span></span><span class="k">class_name</span><span class="w"> </span><span class="n">DolphinController</span>
<span class="k">extends</span><span class="w"> </span><span class="n">CharacterBody3D</span>
<span class="err">@</span><span class="k">export</span><span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">speed</span><span class="p">:</span><span class="w"> </span><span class="nb nb-Type">float</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">5.0</span>
<span class="k">var</span><span class="w"> </span><span class="n">_oxygen</span><span class="p">:</span><span class="w"> </span><span class="nb nb-Type">float</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1.0</span>
<span class="k">func</span><span class="w"> </span><span class="n">take_damage</span><span class="p">(</span><span class="n">amount</span><span class="p">:</span><span class="w"> </span><span class="nb nb-Type">int</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="nb nb-Type">void</span><span class="p">:</span>
<span class="w"> </span><span class="c1"># Réduit les PV et déclenche le signal si mort</span>
<span class="w"> </span><span class="n">health</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="n">amount</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">health</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="mi">0</span><span class="p">:</span>
<span class="w"> </span><span class="n">emit_signal</span><span class="p">(</span><span class="s2">&quot;dolphin_died&quot;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="soumettre-une-contribution">
<h2>Soumettre une contribution<a class="headerlink" href="#soumettre-une-contribution" title="Lien vers cette rubrique"></a></h2>
<ol class="arabic">
<li><p>Créez une branche depuis <code class="docutils literal notranslate"><span class="pre">main</span></code> :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git<span class="w"> </span>checkout<span class="w"> </span>-b<span class="w"> </span>feat/ma-fonctionnalite
</pre></div>
</div>
</li>
<li><p>Faites vos modifications et committez :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git<span class="w"> </span>add<span class="w"> </span>.
git<span class="w"> </span>commit<span class="w"> </span>-m<span class="w"> </span><span class="s2">&quot;feat: description courte&quot;</span>
</pre></div>
</div>
</li>
<li><p>Poussez votre branche :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git<span class="w"> </span>push<span class="w"> </span>origin<span class="w"> </span>feat/ma-fonctionnalite
</pre></div>
</div>
</li>
<li><p>Ouvrez une <strong>Pull Request</strong> sur le Gitea de DauphinCraft.</p></li>
<li><p>Un mainteneur relit et fusionne après validation.</p></li>
</ol>
</section>
<section id="discussion-et-support">
<h2>Discussion et support<a class="headerlink" href="#discussion-et-support" title="Lien vers cette rubrique"></a></h2>
<p>Rejoignez le serveur Discord communautaire et consultez le canal <strong>#dauphincraft-dev</strong>
pour poser vos questions, proposer des idées ou signaler des bugs.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Pied de page">
<a href="modules.html" class="btn btn-neutral float-left" title="Modules du jeu" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Précédent</a>
<a href="../credits.html" class="btn btn-neutral float-right" title="Crédits" accesskey="n" rel="next">Suivant <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Droits d'auteur 2026, Baptiste Moulin.</p>
</div>
Compilé avec <a href="https://www.sphinx-doc.org/">Sphinx</a> en utilisant un
<a href="https://github.com/readthedocs/sphinx_rtd_theme">thème</a>
fourni par <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More