diff --git a/Localization/GettingStarted-FR.md b/Localization/GettingStarted-FR.md new file mode 100644 index 0000000000..67f348e097 --- /dev/null +++ b/Localization/GettingStarted-FR.md @@ -0,0 +1,205 @@ +# Exiled Documentation pour les bas niveau +*(écrit par [KadeDev](https://github.com/KadeDev) pour la communautée)* +*(traduit par [Crazy](https://github.com/CrazyMega02))* + +## Savoir bien commencer +### Intro +Exiled est une API de bas niveau, c'est à dire que vous pouvez faire appel à des fonction du jeux sans avoir besoin d'API de type bloatware (c'est à dire pré installé dans le jeux). + +Cela permet des mise à jour relativement facile d'Exiled et des mises à jour avant même que le jeux soit mise à jour lui-même. + +Cela permet aussi au developpeurs de plugin à ne pas avoir à constament mettre à jour leur code avec chaque mise à jour d'Exiled ou d'SCP:SL. Il n'y a même pas besoin de mètre à jour leur plugins! + +Ce document ci-joint va vous apprendre les bases pour la création d'un plugin Exiled.D'ici là vous pouvez motrer au monde entier toute la créativitée que vous avez en vous et pourrez créé grace à ce-ci! + +### Exemple de Plugin +Un [Exemple de Plugin](https://github.com/galaxy119/EXILED/tree/master/Exiled.Example) qui est un simple plugin montrant les différents évenements et comment les mettre en place proprement. Cette exemple vous permettra d'apprende à utiliser correctement Exiled. Plusieurs choses sont important dans ce plugin, nous allons donc les voir. + +#### On Enable + On Disable Mise à jour Dynamique +Exiled est un framework qui dispose d'une commande de **Rechargement** qui peut être utilisée pour recharger tous les plugins et en obtenir de nouveaux. Cela signifie que vous devez rendre vos plugins **Dynamiquement à jour.** Cela signifie que chaque variable, événement, coroutine, etc. *doit* être assigné lorsqu'il est activé et annulé lorsqu'il est désactivé. La méthode **On Enable** devrait tout activer, et la méthode **On Disable** devrait tout désactiver. Mais vous vous demandez peut-être ce qu'il en est de **On Reload**? Cette fonction est destinée à transférer les variables statiques, c'est-à-dire que toutes les constantes statiques que vous créez ne seront pas effacées. Vous pouvez donc faire quelque chose comme cela : +```csharp +public static int StaticCount = 0; +public int counter = 0; + +public override void OnEnable() +{ + counter = StaticCount; + counter++; + Info(counter); +} + +public override void OnDisable() +{ + counter++; + Info(counter); +} + +public override void OnReload() +{ + StaticCount = counter; +} +``` + +Et le résultat serait : +```bash +# On enable fires +1 +# Reload command +# On Disable fires +2 +# On Reload fires +# On Enable fires again +3 + +``` +Bien sûr, excluant tout ce qui est autre que les réponses réelles. Sans cela, il serait simplement passé à 1 puis à 2 à nouveau. + +### Joueurs + Events +Maintenant que nous avons terminé de rendre nos plugins **Dynamiquement à jour**, nous pouvons nous concentrer sur la tentative d'interaction avec les joueurs grâce aux événements ! + +Un événement est assez cool, il permet à SCP:SL de communiquer avec Exiled, puis à Exiled avec tous les plugins ! + +Vous pouvez écouter les événements pour votre plugin en ajoutant ceci en haut de votre fichier source principal du plugin : +```csharp +using EXILED; +``` +Ensuite, vous devez référencer le fichier `Exiled.Events.dll` pour réellement obtenir des événements. + +Pour référencer un événement, nous utiliserons une nouvelle classe que nous créons ; appelée "EventHandlers". Le gestionnaire d'événements n'est pas fourni par défaut ; vous devez le créer. + +Nous pouvons le référencer dans les méthodes OnEnable et OnDisable de la manière suivante : + +`MainClass.cs` +```csharp +using Player = Exiled.Events.Handlers.Player; + +public EventHandlers EventHandler; + +public override OnEnable() +{ + // Enregistrez la classe gestionnaire d'événements. Et ajoutez l'événement, + // à l'écouteur d'événements EXILED_Events pour obtenir l'événement. + EventHandler = new EventHandlers(); + Player.Verified += EventHandler.PlayerVerified; +} + +public override OnDisable() +{ + // Rendez-le dynamiquement mis à jour. + // Nous faisons cela en supprimant l'écouteur de l'événement, puis en annulant le gestionnaire d'événements. + // Ce processus doit être répété pour chaque événement. + Player.Verified -= EventHandler.PlayerVerified; + EventHandler = null; +} +``` + +Et dans la classe EventHandlers, nous ferions : + +```csharp +public class EventHandlers +{ + public void PlayerVerified(VerifiedEventArgs ev) + { + + } +} +``` +Maintenant, nous nous sommes correctement connectés à un événement de joueur vérifié qui se déclenche chaque fois qu'un joueur est authentifié après avoir rejoint le serveur ! Il est important de noter que chaque événement a des arguments d'événement différents, et chaque type d'argument d'événement a des propriétés différentes qui lui sont associées. + +EXILED fournit déjà une fonction de diffusion, alors utilisons-la dans notre événement : + +```csharp +public class EventHandlers +{ + public void PlayerVerified(VerifiedEventArgs ev) + { + ev.Player.Broadcast(5, "Welcome to my cool server!"); + } +} +``` + +Comme indiqué ci-dessus, chaque événement a des arguments différents. Ci-dessous se trouve un événement différent qui désactive les portes Tesla pour les joueurs Nine-Tailed Fox. + +`MainClass.cs` +```csharp +using Player = Exiled.Events.Handlers.Player; + +public EventHandlers EventHandler; + +public override OnEnable() +{ + EventHandler = new EventHandlers(); + Player.TriggeringTesla += EventHandler.TriggeringTesla; +} + +public override OnDisable() +{ + // N'oubliez pas, les événements doivent être déconnectés et annulés dans la méthode de désactivation. + Player.TriggeringTesla -= EventHandler.TriggeringTesla; + EventHandler = null; +} +``` + +Et dans la classe EventHandlers. + +`EventHandlers.cs` +```csharp +public class EventHandlers +{ + public void TriggeringTesla(TriggeringTeslaEventArgs ev) + { + // Désactiver l'événement pour les joueurs du personnel de la Fondation. + // Cela peut être accompli en vérifiant le côté du joueur. + if (ev.Player.Role.Side == Side.Mtf) { + // Désactivez le déclencheur de la porte Tesla en définissant ev.IsTriggerable sur false. + // Les joueurs ayant un rang MTF ne déclencheront plus les portes Tesla. + ev.IsTriggerable = false; + } + } +} +``` + + +### Configs +La majorité des plugins Exiled contiennent des configurations. Les configurations permettent aux administrateurs de serveur de modifier les plugins selon leurs besoins, bien que cela soit limité à la configuration fournie par le développeur du plugin. + +Commencez par créer une classe `config.cs`, et changez l'héritage de votre plugin de `Plugin<>` à `Plugin`. + +Maintenant, vous devez faire en sorte que cette configuration hérite de `IConfig`. Après avoir hérité de `IConfig`, ajoutez une propriété à la classe intitulée `IsEnabled` et `Debug`. Votre classe Config devrait maintenant ressembler à ceci : + +```csharp + public class Config : IConfig + { + public bool IsEnabled { get; set; } + public bool Debug { get; set; } + } +``` + +Vous pouvez ajouter n'importe quelle option de configuration là-dedans et y faire référence comme ceci : + +`Config.cs` +```csharp + public class Config : IConfig + { + public bool IsEnabled { get; set; } + public bool Debug { get; set; } + public string TextThatINeed { get; set; } = "this is the default"; + } +``` + +`MainClass.cs` +```csharp + public override OnEnabled() + { + Log.Info(Config.TextThatINeed); + } +``` + +Et félicitations ! Vous avez créé votre tout premier plugin Exiled ! Il est important de noter que tous les plugins **doivent** avoir une configuration IsEnabled. Cette configuration permet aux propriétaires de serveurs d'activer et de désactiver le plugin à leur guise. La configuration IsEnabled sera lue par le chargeur Exiled (votre plugin n'a pas besoin de vérifier si `IsEnabled == true` ou non). + +### Que faire Maintenant ? +Si vous voulez plus d'informations, vous devriez rejoindre notre [discord!](https://discord.gg/PyUkWTg) + +Nous avons un canal #resources que vous pourriez trouver utile, ainsi que des contributeurs Exiled et des développeurs de plugins qui seraient prêts à vous aider dans la création de votre/vos plugin(s). + +Ou vous pourriez consulter tous les événements que nous avons ! Si vous voulez les consulter, [ici!](https://github.com/galaxy119/EXILED/tree/master/Exiled.Events/EventArgs) diff --git a/Localization/README-FR.md b/Localization/README-FR.md new file mode 100644 index 0000000000..003a477734 --- /dev/null +++ b/Localization/README-FR.md @@ -0,0 +1,161 @@ +

EXILED - Bibliothèque d'exécution étendue pour le développement externe

+
+ +[CI](https://github.com/Exiled-Team/EXILED/actions/workflows/main.yml/badge.svg?branch=master) +GitHub Releases +Downloads +![Github Commits](https://img.shields.io/github/commit-activity/w/Exiled-Team/EXILED/apis-rework?style=for-the-badge&logo=git) + + Chat on Discord + + +
+ +EXILED est un framework de plugins de haut niveau pour les serveurs SCP: Secret Laboratory. Il offre un système d'événements aux développeurs afin de manipuler ou de modifier le code du jeu ou de mettre en œuvre leurs propres fonctions. Tous les événements EXILED sont codés avec Harmony, ce qui signifie qu'ils n'ont pas besoin d'être directement modifiés dans les "server assembly" pour fonctionner, ce qui permet deux avantages uniques. + + + - Premièrement, l'ensemble du code du framework peut être librement publié et partagé, permettant aux développeurs de mieux comprendre son fonctionnement et d'offrir des suggestions pour ajouter ou modifier ses fonctionnalités. + - Deuxièmement, puisque tout le code lié au framework est réalisé en dehors du "server assembly", des mises à jour mineures du jeu auront peu, voire aucun, effet sur le framework. Ce qui ajoute une simplicité de mise à jour au jeu ainsi que pour les futures mises à jour. + +# README Traduis +- [Русский](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-Русский.md) +- [中文](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-中文.md) +- [Español](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-ES.md) +- [Polski](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-PL.md) +- [Português-BR](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-BR.md) +- [Italiano](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-IT.md) +- [Čeština](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-CS.md) +- [Dansk](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-DK.md) +- [Türkçe](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-TR.md) +- [Deutsch](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-DE.md) +- [Français](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-FR.md) + +# Installation +L'installation d'EXILED est assez simple. Il se charge via la PluginAPI de Northwood. C'est pourquoi il y a deux dossiers à l'intérieur de l'archive ``Exiled.tar.gz`` dans les fichiers de release. ``SCP Secret Laboratory`` contient les fichiers nécessaires pour charger les fonctionnalités EXILED dans le dossier ``EXILED`` . Tout ce que vous avez à faire est de déplacer ces deux dossiers dans le chemin approprié, qui est expliqué ci-dessous, et vous avez terminé ! + +Si vous choisissez d'utiliser l'installateur, il se chargera, s'il est exécuté correctement, d'installer toutes les fonctionnalités d'EXILED. + +# Windows +### Installation automatique ([plus d'informations](https://github.com/Exiled-Team/EXILED/blob/master/Exiled.Installer/README.md)) +**Note**: Assurez-vous d'être connecté en tant qu'utilisateur exécutant le serveur, ou que vous disposez de privilèges Admin avant d'exécuter l'installateur. + + - Téléchargez **`Exiled.Installer-Win.exe` [ici](https://github.com/Exiled-Team/EXILED/releases)** (cliquez sur "Assets" -> cliquez sur "Installer") + - Placez-le dans le dossier de votre serveur (téléchargez le serveur dédié si vous ne l'avez pas encore fait) + - Double-cliquez sur **`Exiled.Installer.exe`** ou **[téléchargez ce .bat](https://www.dropbox.com/s/xny4xus73ze6mq9/install-prerelease.bat?dl=1)** et placez-le dans le dossier du serveur pour installer la dernière pré-version + - Pour obtenir et installer des plugins, consultez la section [installation de plugin](#installation-de-plugin) ci-dessous. +**Note:** Si vous installez EXILED sur un serveur distant, assurez-vous d'exécuter le .exe avec même utilisateur qui exécute vos serveurs SCP:SL (ou un utilisateur avec des privilèges d'administration) + +### Installation manuelle + - Téléchargez **`Exiled.tar.gz` [ici](https://github.com/Exiled-Team/EXILED/releases)** + - Extrayez son contenu avec [7Zip](https://www.7-zip.org/) ou [WinRar](https://www.win-rar.com/download.html?&L=6) + - Déplacez le dossier **``EXILED``** vers **`%appdata%`** *Note: Ce dossier doit être placé dans ``C:\Users\%UserName%\AppData\Roaming``, et ***NON*** ``C:\Users\%UserName%\AppData\Roaming\SCP Secret Laboratory``, et **IL DOIT** être dans (...)\AppData\Roaming, et non (...)\AppData\!* + - Déplacez **``SCP Secret Laboratory``** vers **`%appdata%`**. + - Windows 10 & 11: + Écrivez `%appdata%` dans Cortana / la barre de recherche, ou la barre d'exploration de fichiers Windows. + - Toute autre version de Windows : + Appuyez sur Win + R et tapez `%appdata%` + +### Installation de plugin +C'est tout, EXILED devrait maintenant être installé et actif la prochaine fois que vous démarrez votre serveur. Notez qu'EXILED par lui-même ne fera presque rien, alors assurez-vous d'obtenir de nouveaux plugins depuis **[notre serveur Discord](https://discord.gg/PyUkWTg)** +- Pour installer un plugin, il suffit de : + - Télécharger un plugin depuis [*sa page de release*](https://i.imgur.com/u34wgPD.jpg) (**il DOIT s'agir d'un fichier `.dll`!**) + - Déplacer vers: ``C:\Users\%UserName%\AppData\Roaming\EXILED\Plugins`` (pour y accéder, appuyez sur Win + R, puis écrivez `%appdata%`) + +# Linux +### Installation automatique ([plus d'informations](https://github.com/Exiled-Team/EXILED/blob/master/Exiled.Installer/README.md)) + +**Note:** Si vous installez EXILED sur un serveur distant, assurez-vous d'exécuter l'installateur avec l'utilisateur qui exécute vos serveurs SCP:SL (ou en tant que root). + + - Téléchargez **`Exiled.Installer-Linux` [ici](https://github.com/Exiled-Team/EXILED/releases)** (cliquez sur "Assets" -> téléchargez l'installateur) + - Installez-le en tapant soit **`./Exiled.Installer-Linux --path /path/to/server`** ou déplacez-le directement à l'intérieur du dossier du serveur, accédez-y avec le terminal (`cd`) et tapez: **`./Exiled.Installer-Linux`**. + - Si vous souhaitez la dernière pré-version, ajoutez simplement **`--pre-releases`**. Exemple: **`./Exiled.Installer-Linux /home/scp/server --pre-releases`** + - Un autre exemple, si vous avez placé `Exiled.Installer-Linux` dans votre dossier de serveur: **`/home/scp/server/Exiled.Installer-Linux --pre-releases`** + - Pour obtenir et installer des plugins, consultez la section [installation de plugins](#installation-de-plugins) ci-dessous. + +### Installation manuelle + - **Assurez-vous** d'être connecté en tant qu'utilisateur qui exécute le(s) serveur(s) SCP. + - Téléchargez **`Exiled.tar.gz` [ici](https://github.com/Exiled-Team/EXILED/releases)** (SSH : faites un clic droit et obtenez le lien `Exiled.tar.gz` puis tapez: **`wget (link_to_download)`**) + - Pour l'extraire dans votre dossier actuel, tapez **``tar -xzvf EXILED.tar.gz``** + - Déplacez le dossier **`EXILED`** vers **``~/.config``**. *Remarque : Ce dossier doit être placé dans ``~/.config``, et ***NON*** ``~/.config/SCP Secret Laboratory``* (SSH: **`mv EXILED ~/.config/`**) + - Déplacez le dossier **`SCP Secret Laboratory`** vers **``~/.config``**. *Remarque : Ce dossier doit être placé dans ``~/.config``, et ***NON*** ``~/.config/SCP Secret Laboratory``* (SSH: **`mv SCP Secret Laboratory ~/.config/`**) + +### Installation de plugins +C'est tout, EXILED devrait maintenant être installé et actif la prochaine fois que vous démarrez votre serveur. Notez qu'EXILED par lui-même ne fera presque rien, alors assurez-vous d'obtenir des plugins depuis **[depuis notre serveur Discord](https://discord.gg/PyUkWTg)** +- Pour installer un plugin, simplement : + - Téléchargez un plugin depuis [*sa page de release*](https://i.imgur.com/u34wgPD.jpg) (**il DOIT s'agir d'un fichier `.dll`!**) + - Déplacez-le vers: ``~/.config/EXILED/Plugins`` (si vous utilisez SSH en tant que root, alors recherchez le `.config` correct qui sera à l'intérieur de `/home/(SCP Server User)`) + +# Config +EXILED quelques options de configuration. +Toutes sont générées automatiquement au démarrage du serveur et se trouvent dans le fichier ``~/.config/EXILED/Configs/(ServerPortHere)-config.yml`` (``%AppData%\EXILED\Configs\(ServerPortHere)-config.yml`` sur Windows). + +Les configurations des plugins ***NE seront PAS*** dans le fichier ``config_gameplay.txt`` mentionné précédemment. Au lieu de cela, les configurations des plugins sont définies dans le fichier ``~/.config/EXILED/Configs/(ServerPortHere)-config.yml`` (``%AppData%\EXILED\(ServerPortHere)-config.yml`` sur Windows). +Cependant, certains plugins peuvent obtenir leurs paramètres de configuration à partir d'autres emplacements. Ceci est simplement l'emplacement par défaut d'EXILED, donc référez-vous au plugin individuel si vous rencontrez des problèmes. + +# Pour les Développeurs + +Si vous souhaitez créer un plugin pour EXILED, c'est relativement simple à faire. Si vous avez besoin ou souhaitez consulter un tutoriel, suivez les instructions sur notre page [Bien Commencer](https://github.com/Exiled-Team/EXILED/blob/master/Localization/GettingStarted-FR.md). + +Pour des tutoriels plus complets et régulièrement mis à jour, consultez [le site d'EXILED](https://exiled-team.github.io/EXILED/articles/install.html). + +Mais veuillez faire attention à suivre les règles suivantes lorsque vous publiez vos plugins : + +- Votre plugin doit contenir une classe appartenant à ``Exiled.API.Features.Plugin<>``, sinon EXILED ne chargera pas votre plugin lorsque le serveur démarrera. +- Lorsqu'un plugin est chargé, le code de la classe mentionnée précédemment dans ``OnEnabled()`` est immédiatement exécuté et n'attend pas que les autres plugins soient chargés. Il n'attend pas non plus que le démarrage du serveur soit terminé. ***Il n'attend rien du tout.*** Lors de la mise en place de votre méthode ``OnEnabled()``, assurez-vous de ne pas accéder à des choses qui ne devraient pas être démarrées par le serveur à ce moment-là, comme par exemple ``ServerConsole.Port``, ou ``PlayerManager.localPlayer``. +- Si vous avez besoin d'accéder à certaines choses avant que votre plugin ne soit chargé, il est recommandé d'attendre l'événement ``WaitingForPlayers`` pour cela. Sinon, encadrez votre code d'une boucle ``while(!x)`` qui vérifie si votre variable/objet qui a besoin de ne plus être ``NULL`` avant de continuer. +- EXILED prend en charge le rechargement dynamique des assembly de plugins en cours d'exécution, ce qui signifie que si vous devez mettre à jour un plugin, cela peut être fait sans redémarrer le serveur. Cependant, si vous mettez à jour un plugin en cours d'exécution, le plugin doit être correctement configuré pour le prendre en charge, sinon vous rencontrerez des problèmes. Consultez la section [Mise à jour Dynamiques](#mise-a-jour-dynamiques) pour plus d'informations et de directives à suivre. +- Il n'y a ***AUCUN*** événement ``OnUpdate``, ``OnFixedUpdate`` ou ``OnLateUpdate`` dans EXILED. Si vous devez exécuter du code aussi souvent, vous pouvez utiliser des coroutines de MEC (ou More Effective Coroutines) qui attendent une frame, 0.01f, ou utiliser une couche de synchronisation comme ``Timing.FixedUpdate`` à la place. + ### Les coroutines de MEC +Si vous n'êtes pas familier avec MEC, voici une breve et simple explication pour vous aider à démarrer. +Les coroutines MEC sont essentiellement des méthodes chronométrées qui prennent en charge des périodes d'attente avant de poursuivre l'exécution, sans interrompre/pausé le thread principal du jeu. +Les coroutines MEC sont sûres à utiliser avec Unity, contrairement au threading traditionnel. ***NE TENTEZ PAS de créer de nouveaux threads pour interagir avec Unity, cela FERA planter le serveur.*** + +Pour utiliser MEC, vous devrez référencer ``Assembly-CSharp-firstpass.dll`` depuis les fichiers du serveur et inclure ``using MEC;``. +Exemple d'appel d'une simple coroutine qui se répète avec un délai entre chaque boucle : + +```cs +using MEC; +using Exiled.API.Features; + +public void SomeMethod() +{ + Timing.RunCoroutine(MyCoroutine()); +} + +public IEnumerator MyCoroutine() +{ + for (;;) //fonctione infinie + { + Log.Info("Hey Je suis une boucle infini!"); //appel à Log.Info pour écrire une ligne sur la console du serveur. + yield return Timing.WaitForSeconds(5f); //Dit à la coroutine d'attendre 5 secondes avant de continuer. Comme c'est à la fin de la boucle, cela empêche effectivement la boucle de se répéter pendant 5 secondes. + } +} +``` + +Il est ***fortement*** recommandé de faire quelques recherches sur Google ou de demander autour de vous sur Discord si vous n'êtes pas familier avec MEC et que vous souhaitez en apprendre d'avantage, obtenir des conseils ou de l'aide. Les questions, aussi 'bêtes' soient-elles, seront toujours répondues de manière aussi utile et claire que possible pour aider les développeurs de plugins à exceller. Un meilleur code profite à tout le monde. + +### Mise a jour Dynamiques +EXILED en tant que framework prend en charge le rechargement dynamique des assembly de plugins sans nécessité de redémarrage du serveur. +Par exemple, si vous démarrez le serveur avec juste ``Exiled.Events`` comme seul plugin, et que vous souhaitez en ajouter un nouveau, vous n'avez pas besoin de redémarrer le serveur pour accomplir cette tâche. Vous pouvez simplement utiliser la commande de la console à distance ou de la console du serveur ``reload plugins`` pour recharger tous les plugins EXILED, y compris les nouveaux qui n'ont pas été chargés auparavant. + +Cela signifie également que vous pouvez *mettre à jour* les plugins sans avoir à redémarrer complètement le serveur également. Cependant, il existe quelques directives que le développeur de plugin doit suivre pour que cela soit réalisé correctement : + +***Pour l'Hôte :*** + - Si vous mettez à jour un plugin, assurez-vous que le nom de son ``assembly`` n'est pas le même que celui de la version actuellement installée (si elle existe). Le plugin doit être construit par le développeur en gardant à l'esprit les mises à jour dynamiques pour que cela fonctionne, simplement renommer le fichier ne suffira pas. + - Si le plugin prend en charge les mises à jour dynamiques, assurez-vous que lorsque vous placez la version la plus récente du plugin dans le dossier "Plugins", vous supprimez également l'ancienne version du dossier avant de recharger EXILED. Ne pas le faire entraînera de nombreux problèmes. + - Tous les problèmes découlant de la mise à jour dynamique d'un plugin relèvent uniquement de la responsabilité de vous et du développeur du plugin en question. Bien qu'EXILED soutienne pleinement et encourage les mises à jour dynamiques, la seule façon pour cela de ne pas fonctionner ou de mal se dérouler est si l'hôte du serveur ou le développeur du plugin a commis une erreur. Vérifiez que tout a été fait correctement par les deux parties avant de signaler un bug aux développeurs d'EXILED concernant les mises à jour dynamiques. + +***Pour les développeurs :*** + - Les plugins souhaitant prendre en charge la mise à jour dynamique doivent veiller à se désabonner de tous les événements auxquels ils sont connectés lorsqu'ils sont désactivés ou rechargés. + - Les plugins comportant des patches ``Harmony`` personnalisés doivent utiliser une sorte de variable changeante dans le nom de l'instance ``Harmony``, et doivent appeler ``UnPatchAll()`` sur leur instance Harmony lorsque le plugin est désactivé ou rechargé. + - Toutes les coroutines démarrées par le plugin dans ``OnEnabled()`` doivent également être arrêtées lorsque le plugin est désactivé ou rechargé. + +Tout cela peut être réalisé dans les méthodes ``OnReloaded()`` ou ``OnDisabled()`` de la classe du plugin. Lorsque EXILED, recharge les plugins, il appelle ``OnDisabled()``, puis ``OnReloaded()``, puis il chargera les nouvelles assembly, et ensuite exécutera ``OnEnabled()``. + +Notez qu'il s'agit de *nouvelles* assembly. Si vous remplacez une ``assembly`` par une autre portant le même nom, elle ne sera ***PAS*** mise à jour. Cela est dû au GAC (Global Assembly Cache) ; si vous tentez de "charger" une ``assembly`` qui est déjà en cache, elle utilisera toujours l'``assembly`` mise en cache. +Pour cette raison, si votre plugin prend en charge les mises à jour dynamiques, vous devez construire chaque version avec un nom d'``assembly`` différent dans les options choisis (renommer le fichier ne fonctionnera pas). De plus, étant donné que l'ancienne ``assembly`` n'est pas "supprimé" lorsqu'elle n'est plus nécessaire, si vous ne vous désabonnez pas des événements, ne démontez pas votre instance ``Harmony``, n'arrêtez pas les coroutines, etc. Ce code continuera également à s'exécuter ainsi que celui de la nouvelle version. +C'est une très mauvaise idée de laisser cela se produire. + +En conséquence, les plugins prenant en charge les mises à jour dynamiques ***DOIVENT*** suivre ces directives, sinon ils seront retirés du serveur Discord en raison du risque potentiel pour les hôtes de serveurs. + +Tous les plugins ne doivent pas forcément prendre en charge les mises à jour dynamiques. Si vous n'avez pas l'intention de prendre en charge les mises à jour dynamiques, c'est parfaitement acceptable. Évitez simplement de changer le nom de l'``assembly`` de votre plugin lorsque vous créez une nouvelle version. Dans de tels cas, assurez-vous que les hôtes de serveurs savent qu'ils devront redémarrer complètement leurs serveurs pour mettre à jour votre plugin. diff --git a/README.md b/README.md index 12e4565b8a..b5607f6b33 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ All EXILED events are coded with Harmony, meaning they require no direct editing - [Dansk](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-DK.md) - [Türkçe](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-TR.md) - [German](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-DE.md) +- [Français](https://github.com/Exiled-Team/EXILED/blob/master/Localization/README-FR.md) # Installation Installation of EXILED is quite simple. It loads itself through Northwood’s Plugin API. That's why there are two folders inside the ``Exiled.tar.gz`` in release files. ``SCP Secret Laboratory`` contains the necessary files to load EXILED features in ``EXILED`` folder. All you need to do is move these two folders into the appropriate path, which are explained below, and you are done!