Skip to content

CraftHelper

Aarnow edited this page Sep 18, 2024 · 5 revisions

CraftHelper

Permet de sauvegarder en base de données des recettes pour concevoir des objets et des véhicules. Le plugin "BetterRecipe" intègre CraftHelper dans AAMenu simplifiant son utilisation. Je vous recommandes d'utiliser ce plugin pour gérer vos différentes recettes. Toutefois, si vous avez besoin d'utiliser CraftHelper en dehors de BetterRecipe, voici les différentes fonctions.

Recipe & Ingredient (recette et ingrédient)

Voici la structure d'une recette :

  • ${\color{Goldenrod}\normalsize{\textsf{Name}}}$ : Le nom du vêtement.
  • ${\color{Goldenrod}\normalsize{\textsf{ObjectId}}}$ : ID de l'objet ou du véhicule
  • ${\color{Goldenrod}\normalsize{\textsf{IsVehicle}}}$ : Valeur booléen indiquant s'il s'agit d'un objet ou d'un véhicule
  • ${\color{Goldenrod}\normalsize{\textsf{Category}}}$ : Nom de la catégorie, vous filtrez vos recettes selon cette catégorie
  • ${\color{Goldenrod}\normalsize{\textsf{IngredientList}}}$ : Liste des ingrédients au format JSON.
  • ${\color{Goldenrod}\normalsize{\textsf{LIngredientList}}}$ : Liste des ingrédients (uniquement des objets)

Pour sérialiser ou désérialiser les ingrédients, utiliser les fonctions à votre disposition:

instanceDeRecipe.SerializeIngredients()
instanceDeRecipe.DeserializeIngredients()

Voici la structure d'un ingrédient:

  • ${\color{Goldenrod}\normalsize{\textsf{ItemId}}}$ : ID de l'objet
  • ${\color{Goldenrod}\normalsize{\textsf{Count}}}$ : Quantité requise de cet objet

Récupérer les recettes

Pour récupérer l'ensemble des recettes de la table ${\color{NavyBlue}\normalsize{\textsf{Recipe}}}$, effectuer la requête suivante dans une fonction asynchrone.

var query = await CraftHelper.GetRecipes();

Récupérer les recettes selon la catégorie

var query = await CraftHelper.GetRecipesByCategoryName("jardiland");

Ajouter une recette

var query = await CraftHelper.AddRecipe(recipe);

Comment utiliser ce système de recette pour mon plugin ?

Imaginons que vous souhaitez créer un plugin permettant de craft plusieurs pizza. Partons du principe que vous avez réalisé vos recettes avec le plugin "BetterRecipe".

Nous commençons par récupérer vos recettes de la catégorie "pizza".

public async void CraftPizza(Player player)
{
    var recipes = await CraftHelper.GetRecipesByCategoryName("pizza");

    //Déclaration
    Panel panel = PanelHelper.Create("Four", UIPanel.PanelType.TabPrice, player, () => CraftPizza(player));

    //Corps
    foreach (var recipe in recipes)
    {
        panel.AddTabLine($"{recipe.Name}", $"{recipe.Category}", ItemUtils.GetIconIdByItemId(recipe.ObjectId), ui => CraftPizzaRecipe(player, recipe));
    }

    //Boutons
    panel.NextButton("Consulter", () => panel.SelectTab());
    panel.CloseButton();

    //Affichage
    panel.Display();
}

Ensuite, après avoir sélectionné la pizza que je souhaite réaliser, je consulte sa recette et je m'assure que le joueur possède bien tous les ingrédients nécessaires avant de la préparer.

 public void CraftPizzaRecipe(Player player, Recipe recipe)
 {
     //Déclaration
     Panel panel = PanelHelper.Create($"{recipe.Name}", UIPanel.PanelType.TabPrice, player, () => CraftPizzaRecipe(player, recipe));

     //Corps

     if (recipe.LIngredientList != null)
     {
         foreach (var ingredient in recipe.LIngredientList)
         {
             panel.AddTabLine($"{ItemUtils.GetItemById(ingredient.ItemId)?.itemName}", $"{ingredient.Count}", ItemUtils.GetIconIdByItemId(ingredient.ItemId), _ =>{});
         }
     }
     else panel.AddTabLine($"Aucun ingrédients", _ => { });

     //Boutons
     panel.PreviousButtonWithAction("Fabriquer", () =>
     {
         //check si le joueur possède les ingrédients avant retrait
         foreach (var ingredient in recipe.LIngredientList)
         {
             if(!InventoryUtils.CheckInventoryContainsItem(player, ingredient.ItemId, ingredient.Count))
             {
                 player.Notify("Recette incomplète", $"Vous n'avez pas suffisament de {ItemUtils.GetItemById(ingredient.ItemId).itemName}", Life.NotificationManager.Type.Warning);
                 return Task.FromResult(false);
             }
         }

         foreach (var ingredient in recipe.LIngredientList)
         {
             InventoryUtils.RemoveFromInventory(player, ingredient.ItemId, ingredient.Count);
         }

         InventoryUtils.AddItem(player, recipe.ObjectId, 1);

         player.Notify("Nouvel objet", $"Vous venez de cuisiner une belle {ItemUtils.GetItemById(recipe.ObjectId).itemName}", Life.NotificationManager.Type.Success);
         return Task.FromResult(true);
     });
     panel.PreviousButton();
     panel.CloseButton();

     //Affichage
     panel.Display();
 }

📒 Wiki

🧱 AAMenu

🔗 ORM

⚡️ EventHelper

🚚 JobHelper

🌀 PointHelper

🎭 SkinHelper

📂 PanelHelper

✒️ TextFormattingHelper

💜 DiscordHelper

🌱 NetworkAreaHelper

🧰 CraftHelper

🚕 VehicleHelper

📡 ProximityHelper

⚙️ OverrideHelper

🧾 JsonHelper

📦 Utilitaires

Clone this wiki locally