Créer un plugin

Une fois avoir respecté tous les pré-requis et installé toutes les dépendances tu vas pouvoir développer ton premier plugin.

Les couches du plugin

Avant de commencer le développement d'un plugin pour DTwo, il est crucial de comprendre sa structure en deux couches distinctes : le backend et le frontend. Cette distinction aide à maintenir la clarté et la facilité de maintenance de l'application.

Un plugin backend concerne toutes les opérations qui se déroulent en arrière-plan. Cela inclut la logique de traitement des données, les interactions avec le serveur du jeu, et tout ce qui est relatif à la manipulation des informations sans interaction directe avec l'utilisateur.

Un plugin frontend, quant à lui, est responsable de l'interface utilisateur. Cela concerne tout ce que l'utilisateur peut voir et avec quoi il peut interagir, comme les boutons, les menus, et les affichages graphiques.

Lorsque vous développez un plugin qui nécessite des modifications à la fois du backend et du frontend, vous devez créer deux plugins distincts, chacun sous forme d'une bibliothèque de liens dynamiques (DLL) séparée :

  1. Plugin Backend (DLL) : Ce plugin gère toute la logique de fond, les opérations de données, et les interactions non-visuelles. Son objectif est de s'assurer que les fonctionnalités nécessaires sont traitées en arrière-plan sans interférer avec l'expérience utilisateur directe.

  2. Plugin Frontend (DLL) : Ce plugin est exclusivement dédié à l'interface utilisateur. Il doit être développé de manière à ne contenir aucune fonctionnalité de backend pour éviter les complications et les mélanges de responsabilités.


Créer un plugin Backend

Créer la classe MyPlugin

Créer une classe MyPlugin.cs (nom au choix) qui hérite de "Plugin" (vous pouvez nommer la classer comme vous le souhaitez)

namespace Dtwo.Plugins.MyPlugin
{
	public class MyPlugin : Plugin
	{
		public MyPlugin (PluginInfos infos, Assembly assembly) : base(infos, assembly)
		{
			// Plugin is loaded
		}
	}
}

Intéragir avec les événements du jeu (dans la classe MyPlugin)

Un évent est appelé lorsqu'une fenêtre reçoit un paquet (un message), la méthode doit prendre le nom de cet évent (correspondant au nom du message), préfixe de "On" et être accompagné de l'attribut "[DofusEvent]". Les évents peuvent être hybrides (fonctionner avec toutes les versions du jeu, ou alors cibler une version en particulier). Dans le cas où vous souhaitez un event hybride, il faudra que le type de votre message correspondent au namespace "Dtwo.API.Hybride.Network.Messages".

Dans le cas où vous souhaitez cibler une version en particulier, vous devrez utiliser le namespace correspond à la version de jeu "Dtwo.API.<VersionDeJeu>.AnkamaGames.Dofus.Network.Messages" Pour connaitre la liste de tous les évents rendez-vous sur cette page.

// Importation du namespace hybride, les events seront hybrides
using Dtwo.API.Hybride.Network.Messages;

[DofusEvent]
// Dans ce cas, PartyJoinMessage vient du namespace Dtwo.API.Hybride
public void OnPartyJoinMessage(DofusWindow dofusWindow, PartyJoinMessage message)
{
    // Une fenêtre vient de recevoir le message "OnPartyJoinMessage", ça veut
    //    dire qu'un personnage vient de rejoindre le groupe appartenant
    //    à cette fenêtre.
}

Compiler / Publier le plugin

  • Faites un clic droit sur votre projet > Compiler, puis rendez-vous dans le dossier où la dll a été créée.

  • Dans le dossier "plugins" de l'application (compilée), créer un dossier qui aura le même nom que votre plugin, exemple : "MyPlugin", et mettez-y la dll, et toutes les dll nécessaires à la compilation (autre que les dll Dtwo)

  • Créer un fichier json dans le même dossier, portant le même nom que votre dll, suffixé de ".infos" (ex : Dtwo.Plugins.MyPlugin.Infos.json)

Vous pouvez lancer l'application et tester ! Vous pouvez debug le plugin en lançant l'application via visual studio en debug.

Aller plus loin

TODO

Créer un plugin Frontend

Dans la majorité des cas (et c'est fortement conseillé), votre plugin "frontend" est accompagné d'un plugin "backend", vous n'aurez pas à vous soucier des évents, et actions à effectuer en jeu; mais seulement la partie interface utilisateur.

Créer la classe MyPluginView

Créer la classe MyPluginView.cs qui hérite de "PluginView", il est conseillé de préfixé par le nom du plugin "frontend", et suffixer par "view".

namespace Dtwo.Plugins.MyPlugin.View
{
	public class MultiAccount_ViewPlugin : ViewPlugin
	{
		public MultiAccount_ViewPlugin(Plugins.PluginInfos infos, Assembly assembly) : base(infos, assembly)
		{
			// Plugin is loaded
		}
	}
}

Créer une page

Faites un clic droit sur votre "projet > Ajouter un Element > Razor component", nommez votre classe "MainPage" (donnez lui le nom que vous souhaitez)

@inherits Dtwo.API.View.ViewPluginPage;
@using Dtwo.API.View.Components;

<DtwoText>Hello World</DtwoText>
<DtwoButton OnClicked="(args) => OnClick()">Click me</DtwoButton>

@code {
    private void OnClick()
    {
        LogManager.Log("Hello World");
    }
}

La liste des components est disponible ici

Référencer la page dans l'application

Une fois la page créée, il faut la référencer dans l'app, dans votre fichier MyPluginView.cs :

public override Dictionary<string, Page> Pages => new Dictionary<string, Page>()
{
	{ 
		"MyPlugin",
		new Page(
		  type:typeof(MainPage),
		  route:"MyPlugin",
		  title:"My Plugin",
		  showInNavbar:true,
		  needSelectedAccount:false)
	}
};

Compiler / Publier le plugin

Mêmes opérations que pour un plugin backend, en veillant à respecter les conventions de nommage. Dans le cas où vous avez du contenu inclut dans wwwrootvous devrez l'inclure dans le wwrootde l'app (wwwroot/plugins/<Nom de votre Plugin>)

Aller plus loin

TODO

Last updated