CRÉEZ VOTRE MONDE
Économie
Exemples d'utilisation de l'API produit
18 min
les exemples suivants montrent comment utiliser l'api produit pour gérer la monnaie mondiale et les produits mondiaux cet exemple vous permet de comprendre les bases de l'api produit et d'implémenter l'envoi et la réception de messages entre le serveur et le client, afin que vous puissiez facilement tester l'octroi et la déduction de monnaies et de produits mondiaux cet exemple comprend des descriptions des scripts clients de la monnaie mondiale et des produits mondiaux, suivies du script serveur intégré qui gère tout le traitement côté serveur, et inclut les fonctions suivantes octroi de monnaie mondiale déduction de monnaie mondiale octroi de produits mondiaux sans déduction de monnaie déduction de produits mondiaux octroi & déduction de monnaie mondiale ci dessous se trouve le code client complet pour gérer l'octroi et la déduction de devises mondiales, et comment l'implémenter script client de devises currencymanagersample import { button, text } from 'unityengine ui'; import { zepetoscriptbehaviour } from 'zepeto script' import { localplayer, zepetoplayers } from 'zepeto character controller'; import { room, roomdata } from 'zepeto multiplay'; import { zepetoworldmultiplay } from 'zepeto world'; export default class currencymanagersample extends zepetoscriptbehaviour { public currencyid string; public increasequantity number; public decreasequantity number; public increasecurrencybtn button; public decreasecurrencybtn button; public balancetext text; public multiplay zepetoworldmultiplay; private localplayer localplayer; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { this localplayer = zepetoplayers instance localplayer; this loadcurrencybalance(this currencyid); }); // gère les événements de salle rejointes pour les mises à jour de l'ui de la devise this multiplay roomjoined += (room room) => { room addmessagehandler("synccurrencyinfo", (message currencymessage) => { const currentcurrencyid = message currencyid; const currentquantity = message quantity; this balanceuiupdate(currentcurrencyid, currentquantity); }); }; // écouteur d'événements de bouton pour augmenter la devise demander un crédit this increasecurrencybtn onclick addlistener(() => { const data = new roomdata(); data add("currencyid", this currencyid); data add("quantity", this increasequantity); this multiplay room? send("creditcurrency", data getobject()); }) // écouteur d'événements de bouton pour diminuer la devise demander un débit this decreasecurrencybtn onclick addlistener(() => { const data = new roomdata(); data add("currencyid", this currencyid); data add("quantity", this decreasequantity); this multiplay room? send("debitcurrency", data getobject()); }) } // demande le montant actuel de la devise spécifiée private loadcurrencybalance(currentcurrencyid string) { this multiplay room? send("loadbalance", currentcurrencyid); } // met à jour l'ui pour refléter la quantité actuelle de la devise private balanceuiupdate(currentcurrencyid string, currentquantity number) { this balancetext text = currentquantity tostring(); } } // interface pour les messages de synchronisation de devise interface currencymessage { currencyid string, quantity number, } description du script client de devises lorsqu'un personnage est chargé, un message de salle est envoyé au serveur pour charger le solde existant de la devise l'ui est ensuite mise à jour en fonction des informations de solde reçues du serveur this multiplay room? send("loadbalance", currentcurrencyid); pour faciliter l'échange de messages, l' currencymessage interface est définie interface currencymessage { currencyid string, quantity number, } lorsqu'un utilisateur augmente ou diminue sa monnaie, il envoie une demande au serveur sous forme de message de salle cela inclut des données sur quelle monnaie augmenter ou diminuer et de combien this multiplay room? send("creditcurrency", data getobject()); this multiplay room? send("debitcurrency", data getobject()); le serveur traite ensuite l'augmentation ou la diminution de la monnaie et envoie les informations de solde final au client le client reçoit ces informations et met à jour l'interface utilisateur exemples d'utilisation de l'api produit /#script de serveur this multiplay roomjoined += (room room) => { room addmessagehandler("synccurrencyinfo", (message currencymessage) => { const currentcurrencyid = message currencyid; const currentquantity = message quantity; this updatebalanceui(currentcurrencyid, currentquantity); }); }; accorder & déduire des produits mondiaux ci dessous se trouve le code client complet pour gérer l'octroi et la déduction de produits mondiaux, et comment l'implémenter script client produit productmanagersample import { button, text } from 'unityengine ui'; import { zepetoscriptbehaviour } from 'zepeto script' import { localplayer, zepetoplayers } from 'zepeto character controller'; import { room, roomdata } from 'zepeto multiplay'; import { zepetoworldmultiplay } from 'zepeto world'; import { inventoryrecord, inventoryservice } from 'zepeto inventory'; import { waituntil } from 'unityengine'; export default class productmanagersample extends zepetoscriptbehaviour { public productid string; public productaddquantity number; public acquireitembtn button; public useitembtn button; public itemcounttext text; public multiplay zepetoworldmultiplay; private localplayer localplayer; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { this localplayer = zepetoplayers instance localplayer; this startcoroutine(this refreshproductui()); }); // gère les événements de salle rejointes pour les mises à jour de l'ui produit this multiplay roomjoined += (room room) => { room addmessagehandler("syncproductinfo", (message productmessage) => { this startcoroutine(this refreshproductui()); }); }; // écouteur d'événements de bouton pour l'acquisition d'éléments ajouter produit this acquireitembtn onclick addlistener(() => { const data = new roomdata(); data add("productid", this productid); data add("quantity", this productaddquantity); this multiplay room? send("addproduct", data getobject()); }) // écouteur d'événements de bouton pour l'utilisation d'éléments utiliser produit this useitembtn onclick addlistener(() => { const data = new roomdata(); data add("productid", this productid); data add("quantity", 1); this multiplay room? send("useproduct", data getobject()); }) } private refreshproductui() { const request = inventoryservice getasync(this productid); yield new waituntil(() => request keepwaiting == false); // si la demande est réussie, met à jour l'ui produit if (request responsedata issuccess) { this updateitemcounttext(request responsedata product); } else { console log("échec du chargement de l'élément produit "); } } private updateitemcounttext(item inventoryrecord) { if (item != null) { this itemcounttext text = item quantity tostring(); } else { this itemcounttext text = "0"; } } } // interface pour les messages de produit interface productmessage { productid string, productaction productaction, } // enum pour définir les types d'actions de produit export enum productaction { utiliser, ajouter, } description du script client du produit lorsqu'un personnage se charge, utilisez le inventoryservice de zepeto inventory https //developer zepeto me/docs/product/namespaces/zepeto inventory/ pour charger l'inventaire initial des produits ensuite, mettez à jour l'interface utilisateur private refreshproductui() { const request = inventoryservice getasync(this productid); yield new waituntil(() => request keepwaiting == false); if (request responsedata issuccess) { this updateitemcounttext(request responsedata product); } else { console log("échec du chargement de l'élément produit "); } } pour envoyer et recevoir des messages, définissez l' productmessage interface définissez un productaction enum pour l'implémentation d'exemple interface productmessage { productid string, productaction productaction, } export enum productaction { utiliser, ajouter, } lorsque vous augmentez ou diminuez un produit, vous envoyez ces données au serveur en tant que message de salle cela inclut des données sur quel produit augmenter ou diminuer et de combien this multiplay room? send("addproduct", data getobject()); this multiplay room? send("useproduct", data getobject()); après avoir traité les changements de produit, le serveur envoie les informations finales sur l'inventaire au client, qui met à jour l'interface utilisateur en conséquence exemples d'utilisation de l'api produit /#script de serveur this multiplay roomjoined += (room room) => { room addmessagehandler("syncproductinfo", (message productmessage) => { this startcoroutine(this refreshproductui()); }); }; en général, les produits du monde devraient coûter de la monnaie pour être achetés dans ce cas, vous pouvez facilement les vendre avec un bouton d'achat de produit en vous référant au guide monétisez votre monde ! configuration des produits et des devises docid\ mpn9jdgdg0h2t7n7ixnax script de serveur voici le code complet du serveur qui gère la monnaie mondiale et les produits, et comment l'implémenter script de serveur complet import { sandbox, sandboxoptions, sandboxplayer } from "zepeto multiplay"; import { loadcurrency } from "zepeto multiplay currency"; import { loadinventory } from "zepeto multiplay inventory"; export default class extends sandbox { async oncreate(options sandboxoptions) { // monnaie //demande de chargement de la monnaie this onmessage("loadbalance", (client, message string) => { this loadbalance(client, message); }); //demande d'ajout de crédit this onmessage("creditcurrency", (client, message currencymessage ) => { const currencyid = message currencyid; const quantity = message quantity; this addcredit(client, currencyid, quantity); }); //demande de débit de crédit this onmessage("debitcurrency", (client, message currencymessage ) => { const currencyid = message currencyid; const quantity = message quantity; this ondebit(client, currencyid, quantity); }); // produit //demande d'ajout d'article this onmessage("addproduct", (client, message any) => { const productid = message productid; const quantity = message quantity; this addproduct(client, productid, quantity); }); //demande d'utilisation d'article this onmessage("useproduct", (client, message any) => { const productid = message productid; const quantity = message quantity; this useproduct(client, productid, quantity); }); } async addcredit(client sandboxplayer, currencyid string, quantity number) { try { const currency = await loadcurrency(client userid); await currency credit(currencyid, quantity); this loadbalance(client, currencyid); } catch (e) { console error(`addcredit error ${e}`); } } async ondebit(client sandboxplayer, currencyid string, quantity number) { try { const currency = await loadcurrency(client userid); if (await currency debit(currencyid, quantity) === true) { this loadbalance(client, currencyid); } else { console error("debitcredit error monnaie insuffisante"); } } catch (e) { console error(`debitcredit error ${e}`); } } async loadbalance(client sandboxplayer, currencyid string) { try { const currency = await loadcurrency(client userid); let balancesobject = await currency getbalances(); let balancesmap map\<string, number> = new map(object entries(balancesobject)); const specificcurrencyid = currencyid; const specificbalance = balancesmap get(specificcurrencyid) ?? 0; const currencysync currencymessage = { currencyid specificcurrencyid, quantity specificbalance } client send("synccurrencyinfo", currencysync); } catch (e) { console error(`loadbalance error ${e}`); } } async addproduct(client sandboxplayer, productid string, quantity number) { try { const inventory = await loadinventory(client userid); await inventory add(productid, quantity); const productmessage productmessage = { productid productid, productaction productaction add } client send("syncproductinfo", productmessage); } catch (e) { console error(`addproduct error ${e}`); } } async useproduct(client sandboxplayer, productid string, quantity number) { try { const inventory = await loadinventory(client userid); await inventory use(productid, quantity); const productmessage productmessage = { productid productid, productaction productaction use } client send("syncproductinfo", productmessage); } catch (e) { console error(`useproduct error ${e}`); } } onjoin(client sandboxplayer) { // logique onjoin ici } ontick(deltatime number) void { // logique tick ici } onleave(client sandboxplayer, consented? boolean) { // gérer la logique de départ ici } } // interface pour les messages de monnaie interface currencymessage { currencyid string, quantity number, } // interface pour les messages de produit interface productmessage { productid string, productaction productaction, } // enum pour définir les types d'actions de produit export enum productaction { use, add, } description du script serveur gérer la monnaie mondiale via zepeto multiplay currency https //developer zepeto me/docs/multiplay server/namespaces/zepeto multiplay currency/ utiliser currency credit() et currency debit() pour augmenter ou diminuer le solde de la monnaie souhaitée ensuite, appelez currency getbalances() pour obtenir le solde actuel de chaque monnaie currency credit(currencyid, quantity); currency debit(currencyid, quantity); currency getbalances(); gérer les produits mondiaux via zepeto multiplay inventory https //developer zepeto me/docs/multiplay server/namespaces/zepeto multiplay inventory utiliser inventory add() et inventory use() pour augmenter ou diminuer le solde de la monnaie souhaitée inventory add(productid, quantity); inventory use(productid, quantity); gère les demandes des clients pour augmenter ou diminuer les devises et les produits utilisez loadbalance() pour obtenir les informations de devise enregistrées dans zepeto studio s'il y a plusieurs devises, vous pouvez conditionner sur une valeur d'id de devise spécifique pour obtenir le solde de cette seule devise passez la valeur finale du solde au client en tant que message de salle