Passer au contenu principal

Conception > Marché > Catalogue d'items

Utilisez le modèle d'objet pour créer des objets de jeu hébergés dans le cloud.

Jason Liang avatar
Écrit par Jason Liang
Mis à jour il y a plus d’une semaine

La gestion des éléments est un moyen puissant et rapide pour votre équipe de conception de développer une sélection d'éléments clés dans votre application.

Conception

Vous pourrez utiliser un formulaire type pour définir la nature essentielle des items et en ajuster facilement de nombreux aspects fondamentaux sans l'aide d'un développeur. Ce système est idéal pour :

Objets cosmétiques

  • Chapeau pour votre héros : achetez-le une fois, utilisez-le à vie.

Equipement

  • Épée : Achetez-en une, elle s’use à l’usage. Elle disparaît une fois usée.

Bonus de jeu par manche :

  • Booster Double XP : Achetez-le une fois, utilisez-le une fois

  • Pack triple de boosters Double XP : Achetez-le une fois, utilisez-le trois fois.

Bonus de jeu temporaires :

  • Potion d'invincibilité : à acheter une fois, à activer, à utiliser pendant une durée déterminée.

Bonus de jeu permanents :

  • Doubleur de pièces à vie : achetez une fois, utilisez-le à vie.

Si votre projet l'exige, les objets peuvent également être configurés comme non échangeables ou ne pouvant être déposés.

Implémentation

Pour gérer ou créer de nouveaux items, consultez la page Catalogue d'items sur le portail brainCloud.

Utilisez le filtre pour vous concentrer uniquement sur les articles qui vous intéressent.

Statut:

  • Brouillon - Cet item n'est pas exposé au client. Vous pouvez utiliser cet état pour effectuer la configuration initiale de l'item et l'implémenter ultérieurement dans votre application.

  • Publié - Cet item est disponible dans le jeu

  • Retiré du jeu - Cet item ne peut plus être acquis dans le jeu, mais ses propriétaires actuels sont autorisés à continuer à l'utiliser.

  • Révoqué - Cet item a été banni du jeu et retiré des inventaires de vos usagers.

Remarque : les items doivent être à l’état de brouillon ou déplacés à l’état révoqué avant de pouvoir être supprimés.

Conseil : Optimisez votre flux de travail en choisissant de trier par statut afin de placer les items brouillon en haut de la liste.

Vous pouvez utiliser les cases à cocher situées à gauche de la liste pour agir sur plusieurs items simultanément. Toutefois, les actions ne sont visibles que lorsque des items de même statut sont sélectionnés (à l'exception de l'action Supprimer pour les items non publiés).

Création d'un nouvel élément

  • Cliquez sur [+ Créer...] en haut à droite

  • À partir de l'onglet Détails

    • Saisissez un ID de définition. Il s'agit de l'identifiant unique utilisé pour référencer et attribuer l'item.

    • Saisissez un nom d'item pour l'usager. Il est recommandé de définir une longueur maximale pour ce nom afin qu'il s'affiche correctement dans l'interface de l'application.

    • Saisissez une description destinée à l'usager. De même, vous devrez peut-être opter pour des descriptions concises afin de préserver l'espace d'interface usager de votre application et de simplifier l'affichage du texte.

    • Sélectionnez le type : "Item". brainCloud proposera bientôt des lots d’articles.

    • Saisissez une catégorie. Les catégories permettent de regrouper et de filtrer les résultats. Par exemple : Épées, Potions, Boosters ou Doubleurs sont de bonnes catégories.

    • Ajoutez des mots-clés qui aideront vos usagers à filtrer et à trouver des items spécifiques. Les mots-clés ne doivent pas contenir d'espaces et doivent être séparés par des virgules.

    • Vous pouvez également ajouter le groupe de ressources et le marqueur de ressource. Ces valeurs indiquent où votre jeu trouve les ressources graphiques nécessaires à l'item.

  • Dans l'onglet Localisation, vous pouvez, si vous le souhaitez, ajouter un nom et une description localisés pour l'item si vous avez configuré la localisation pour votre application.

  • Depuis l'onglet Prix

    • Sélectionnez Gérer pour définir un prix d'achat pour votre item.

    • Faites de même pour le prix de vente de cet item.

    • Vous pouvez définir un prix par type de devise dans votre jeu. Proposer plusieurs prix peut s'avérer utile pour montrer aux joueurs l'intérêt d'utiliser à la fois des devises virtuelles et des devises monétaires.

Il est courant de proposer un prix de vente plus bas pour inciter les usagers à acheter uniquement ce dont ils ont besoin, et non de manière superflue. De plus, il est généralement important pour l'économie du jeu que les objets échangeables aient une faible valeur de revente afin de limiter les transferts de devises entre joueurs.

  • À partir de l'onglet Comportement

    • Choisissez si votre objet est empilable. L'option "Empilable" doit être activée lorsque chaque instance de l'objet dans le jeu possède les mêmes attributs ET que l'usager peut en collecter plusieurs. Par exemple, une "Petite potion de soin" est empilable. Les objets personnalisables ou ayant un temps de recharge ne doivent pas être empilables. En général, les objets cosmétiques et permanents ne sont pas empilables, contrairement aux objets de gameplay comme les bonus d'XP ou les potions de soin.

    • Si l'objet est consommé en cours de partie, activez l'option Consommable . Sélectionnez le nombre d'utilisations par unité.

    • Il est possible de définir une période de recharge , obligeant le joueur à patienter avant de pouvoir réutiliser un objet. Par exemple, une potion de boule de feu peut avoir un temps de recharge d'une minute avant de pouvoir être réutilisée.

      Comme les périodes de recharge et de récupération sont gérées côté serveur, il est facile d'implémenter des bonus durant plusieurs jours. Par exemple, l'équipe de conception pourrait créer un bâtiment (ou un PNJ) offrant un bonus de double XP de 48 heures, rechargeable deux fois par mois (avec possibilité d'en acheter d'autres dans la boutique). Cela donnerait aux joueurs des outils de motivation supplémentaires pour améliorer leur engagement, et ce, avec un effort de développement relativement faible.

    • Il est possible de configurer une récupération qui contrôle la vitesse à laquelle l'appareil se recharge. L'appareil récupère une charge par période définie.

    • Si l'item est activable pour un effet de statut, définissez le nom de l'effet de statut et sa durée active.

    • Échangeable : Si vous souhaitez interdire le transfert d’un objet (comme un objet cosmétique ou un objet non récupérable), laissez l’option "Échangeable" décochée. L'activer autorisera le transfert d’un exemplaire de l’objet entre comptes de joueurs.

    • Utilisation de la blockchain : Discutez avec votre équipe de l’opportunité d’utiliser la blockchain pour renforcer la sécurité des objets échangeables, non cumulables et de grande valeur. Veuillez noter que l’utilisation de la blockchain peut considérablement ralentir les transactions pendant leur exécution (jusqu’à plusieurs heures).

  • À partir de l'onglet Données personnalisées

    • Métadonnées : Définissez avec votre équipe le format à utiliser pour les métadonnées personnalisées. Par exemple : les dégâts, la précision et la portée sont souvent des valeurs utiles.

    • Données d'item initiales : Saisissez l'état initial personnalisé de l'item. Par exemple, une épée rouillée pourrait être partiellement usée au départ, permettant au joueur de la réparer jusqu'à 100 % de sa durabilité.

  • Une fois toutes les étapes ci-dessus terminées, sélectionnez [Sauvegarder] pour enregistrer cet élément.

  • Si votre item possède une icône d'image, vous pouvez maintenant sélectionner Modifier et télécharger celle-ci.

  • Déterminez avec votre équipe comment intégrer cet item à votre application. Lorsque vous serez prêt à le rendre visible à votre client, sélectionnez "Publier".

    N'oubliez pas : la fonction Cloner permet de créer rapidement des éléments similaires avec des modifications mineures.

Conseil de développement : le catalogue d’items possède sa propre API qui vous permet de gérer par programmation tous ces aspects de configuration. Consultez la documentation de référence de l’API pour en savoir plus sur SysAddCatalogItem et les autres appels d’API système.

Écrire le code

Maintenant que vous avez ajouté des définitions d'items au catalogue d'items, vous voudrez les attribuer à vos joueurs.

Dans votre code client

  • Ajoutez le client brainCloud à votre application.

  • Associez le client au tableau de bord.

  • Authentifiez votre usager sur brainCloud.

  • Récupérez les items publiés du catalogue à l'aide de l'appel GetCatalogItemsPage.

  • Offrez deux items choisis au hasard dans le catalogue.

  • Obtenez la liste de tous les items que l'usager possède actuellement.

  • Demandez à l'usager de déposer aléatoirement l'un de ces items.

  • Consultez les autres appels relatifs aux items de l'usager et au catalogue d'items pour votre application dans la documentation de référence de l'API.

    private BrainCloudWrapper _bc;
    private string _wrapperName = "default";

    void LogError(int status, int code, string error, object cbObject)
    {
    Debug.Log(String.Format("An error occured {0} : {1} ({2})", status, error, code));
    }

    void Start() {
    // Unity
    GameObject go = new GameObject();
    _bc = go.AddComponent<BrainCloudWrapper>();
    _bc.WrapperName = _wrapperName; // définir éventuellement un nom pour le wrapper
    _bc.Init(); // les données supplémentaires, telles que : _appId, _secret et _appVersion, sont extraites du plugin Unity brainCloud.
    DontDestroyOnLoad(go); // conserver l'objet de jeu brainCloud lors des changements de scène

    _bc.AuthenticateAnonymous((response, cbObject) =>
    {
    CheckTheItemCatalog();
    }, LogError);
    }

    List<string> itemsToAward = new List<string>();

    // Obtenir une liste d'items du catalogue d'items
    void CheckTheItemCatalog()
    {
    var context = BrainCloud.JsonFx.Json.JsonWriter.Serialize(new Dictionary<string, object>
    {
    {"pagination", new Dictionary<string, object> {
    {"rowsPerPage", 50},
    {"pageNumber", 1}
    }
    },
    {"searchCriteria", new Dictionary<string, object> {
    {"category", "collectable"}, // Choisir une catégorie d'item
    {"pState", "PUBLISHED"} // S'assurer qu'il est publié
    }
    },
    {"sortCriteria", new Dictionary<string, object> {
    {"createdAt", 1},
    {"updatedAt", -1}
    }
    }
    });

    _bc.ItemCatalogService.GetCatalogItemsPage(context, (response, cbObject) =>
    {
    var jsonMessage =
    (Dictionary<string, object>) BrainCloud.JsonFx.Json.JsonReader.Deserialize(response);
    var jsonData = (Dictionary<string, object>) jsonMessage["data"];
    var results = (Dictionary<string, object>) jsonData["results"];
    var items = (Dictionary<string, object>[]) results["items"];

    if (items.Length > 0)
    {
    var random = new System.Random();

    // Sélectionner aléatoirement deux items de la première page du catalogue

    itemsToAward.Add((string)items[random.Next(items.Length)]["defId"]);
    itemsToAward.Add((string)items[random.Next(items.Length)]["defId"]);

    AwardItems();
    }
    }, LogError);
    }

    // Attribuer deux de ces items à l'usager
    void AwardItems()
    {
    int called = 0;
    foreach (var itemDefId in itemsToAward)
    {
    var quantity = 1;
    var includeDef = false;

    _bc.UserItemsService.AwardUserItem(itemDefId, quantity, includeDef, (response, cbObject) =>
    {
    called++;

    // Une fois tous les items attribués, vérifions l'inventaire
    if (called == itemsToAward.Count)
    {
    ReadUserItems();
    }
    }, (status, code, error, cbObject) =>
    {
    LogError(status, code, error, cbObject);
    });

    }

    }

    List<string> itemsToDrop = new List<string>();
    // Récupérer la liste des items de l'inventaire de l'usager
    void ReadUserItems()
    {
    var context = BrainCloud.JsonFx.Json.JsonWriter.Serialize(new Dictionary<string, object>
    {
    {"pagination", new Dictionary<string, object> {
    {"rowsPerPage", 50},
    {"pageNumber", 1}
    }
    },
    {"searchCriteria", new Dictionary<string, object> {
    // Nos critères de recherche seront vides, afin de récupérer tous les items possibles
    }
    },
    {"sortCriteria", new Dictionary<string, object> {
    {"createdAt", 1},
    {"updatedAt", -1}
    }
    }
    });


    var includeDef = true;
    _bc.UserItemsService.GetUserItemsPage(context, includeDef, (response, cbObject) =>
    {
    var jsonMessage =
    (Dictionary<string, object>) BrainCloud.JsonFx.Json.JsonReader.Deserialize(response);
    var jsonData = (Dictionary<string, object>) jsonMessage["data"];
    var results = (Dictionary<string, object>) jsonData["results"];
    var items = (Dictionary<string, object>[]) results["items"];

    if (items.Length > 0)
    {
    var random = new System.Random();

    // Sélectionner aléatoirement un item de la première page des items de l'usager

    itemsToDrop.Add((string)items[random.Next(items.Length)]["itemId"]);

    DropItem();
    }
    }, LogError);
    }

    // Déposer un de ces items
    void DropItem()
    {
    foreach (var itemDefId in itemsToDrop)
    {
    var quantity = 1;
    var includeDef = false;

    _bc.UserItemsService.DropUserItem(itemDefId, quantity, includeDef, (response, cbObject) => { }, (status, code, error, cbObject) =>
    {
    LogError(status, code, error, cbObject);
    });
    } }

    Approfondissement des connaissances

    • Essayez d'utiliser des items qui déclenchent des conditions d'état, avec UseUserItem, et consultez les conditions d'état actuelles de l'usager avec ReadUserState.

    • Créez et attribuez une monnaie virtuelle à votre joueur, et utilisez PurchaseUserItem et SellUserItem pour ajouter et retirer des items à l'usager.

    • Créez plusieurs usagers et utilisez à la fois GiveUserItemTo et ReceiveUserItemFrom pour permettre aux joueurs de transférer des items entre eux.

Avez-vous trouvé la réponse à votre question ?