BUAT DUNIAMU
Ekonomi
Contoh Penggunaan API Produk
18min
berikut adalah contoh penggunaan product api untuk mengelola mata uang dunia dan produk dunia contoh ini memungkinkan anda untuk mendapatkan pemahaman dasar tentang product api dan menerapkan pengiriman serta penerimaan pesan antara server dan klien, sehingga anda dapat dengan mudah menguji pemberian dan pengurangan mata uang dunia dan produk contoh ini mencakup deskripsi dari skrip klien mata uang dunia dan produk dunia, diikuti oleh skrip server terintegrasi yang menangani semua pemrosesan sisi server, dan mencakup fungsi fungsi berikut pemberian mata uang dunia pengurangan mata uang dunia pemberian produk dunia tanpa pengurangan mata uang pengurangan produk dunia pemberian & pengurangan mata uang dunia di bawah ini adalah kode klien lengkap untuk mengelola pemberian dan pengurangan mata uang dunia, serta cara mengimplementasikannya skrip klien mata uang 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); }); // menangani peristiwa bergabungnya ruangan untuk pembaruan ui mata uang this multiplay roomjoined += (room room) => { room addmessagehandler("synccurrencyinfo", (message currencymessage) => { const currentcurrencyid = message currencyid; const currentquantity = message quantity; this balanceuiupdate(currentcurrencyid, currentquantity); }); }; // pendengar peristiwa tombol untuk meningkatkan mata uang permintaan kredit 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()); }) // pendengar peristiwa tombol untuk mengurangi mata uang permintaan debit 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()); }) } // meminta jumlah mata uang yang ditentukan saat ini private loadcurrencybalance(currentcurrencyid string) { this multiplay room? send("loadbalance", currentcurrencyid); } // memperbarui ui untuk mencerminkan jumlah mata uang saat ini private balanceuiupdate(currentcurrencyid string, currentquantity number) { this balancetext text = currentquantity tostring(); } } // antarmuka untuk pesan sinkronisasi mata uang interface currencymessage { currencyid string, quantity number, } deskripsi skrip klien mata uang ketika karakter dimuat, pesan ruangan dikirim ke server untuk memuat saldo mata uang yang ada ui kemudian diperbarui berdasarkan informasi saldo yang diterima dari server this multiplay room? send("loadbalance", currentcurrencyid); untuk memfasilitasi pertukaran pesan, currencymessage antarmuka didefinisikan interface currencymessage { currencyid string, quantity number, } ketika seorang pengguna meningkatkan atau mengurangi mata uang mereka, mereka mengirim permintaan ke server sebagai pesan ruangan ini mencakup data tentang mata uang mana yang akan ditingkatkan atau dikurangi dan seberapa banyak this multiplay room? send("creditcurrency", data getobject()); this multiplay room? send("debitcurrency", data getobject()); server kemudian memproses peningkatan atau pengurangan mata uang dan mengirim informasi saldo akhir ke klien klien menerima informasi ini dan memperbarui ui contoh penggunaan api produk docid 3m067mdrmufhbskehgrsb this multiplay roomjoined += (room room) => { room addmessagehandler("synccurrencyinfo", (message currencymessage) => { const currentcurrencyid = message currencyid; const currentquantity = message quantity; this updatebalanceui(currentcurrencyid, currentquantity); }); }; memberikan & mengurangi produk dunia di bawah ini adalah kode klien lengkap untuk mengelola pemberian dan pengurangan produk dunia, serta cara mengimplementasikannya skrip klien produk 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()); }); // menangani peristiwa bergabung ke ruangan untuk pembaruan ui produk this multiplay roomjoined += (room room) => { room addmessagehandler("syncproductinfo", (message productmessage) => { this startcoroutine(this refreshproductui()); }); }; // pendengar peristiwa tombol untuk mendapatkan item tambah produk 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()); }) // pendengar peristiwa tombol untuk menggunakan item gunakan produk 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); // jika permintaan berhasil, perbarui ui produk if (request responsedata issuccess) { this updateitemcounttext(request responsedata product); } else { console log("gagal memuat item produk "); } } private updateitemcounttext(item inventoryrecord) { if (item != null) { this itemcounttext text = item quantity tostring(); } else { this itemcounttext text = "0"; } } } // antarmuka untuk pesan produk interface productmessage { productid string, productaction productaction, } // enum untuk mendefinisikan jenis tindakan produk export enum productaction { gunakan, tambah, } deskripsi skrip klien produk ketika karakter dimuat, gunakan inventoryservice dari zepeto inventory https //developer zepeto me/docs/product/namespaces/zepeto inventory/ untuk memuat inventaris awal produk kemudian perbarui ui 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("gagal memuat item produk "); } } untuk mengirim dan menerima pesan, definisikan productmessage antarmuka definisikan sebuah productaction enum untuk implementasi contoh interface productmessage { productid string, productaction productaction, } export enum productaction { gunakan, tambah, } ketika anda meningkatkan atau mengurangi produk, anda mengirim data tersebut ke server sebagai pesan ruangan ini mencakup data tentang produk mana yang akan ditingkatkan atau dikurangi dan seberapa banyak this multiplay room? send("addproduct", data getobject()); this multiplay room? send("useproduct", data getobject()); setelah memproses perubahan produk, server mengirimkan informasi inventaris akhir kepada klien, yang memperbarui ui sesuai contoh penggunaan api produk docid 3m067mdrmufhbskehgrsb this multiplay roomjoined += (room room) => { room addmessagehandler("syncproductinfo", (message productmessage) => { this startcoroutine(this refreshproductui()); }); }; umumnya, produk dunia harus memerlukan mata uang untuk dibeli dalam hal ini, anda dapat dengan mudah menjualnya dengan tombol pembelian produk dengan merujuk pada panduan monetize your world! mengatur produk dan mata uang docid 8mv4m22vt9kyawu6xkfqm skrip server berikut adalah kode server lengkap yang mengelola mata uang dunia dan produk, serta cara mengimplementasikannya skrip server lengkap 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) { // mata uang //permintaan memuat mata uang this onmessage("loadbalance", (client, message string) => { this loadbalance(client, message); }); //permintaan menambahkan kredit this onmessage("creditcurrency", (client, message currencymessage ) => { const currencyid = message currencyid; const quantity = message quantity; this addcredit(client, currencyid, quantity); }); //permintaan mendebit kredit this onmessage("debitcurrency", (client, message currencymessage ) => { const currencyid = message currencyid; const quantity = message quantity; this ondebit(client, currencyid, quantity); }); // produk //permintaan menambahkan item this onmessage("addproduct", (client, message any) => { const productid = message productid; const quantity = message quantity; this addproduct(client, productid, quantity); }); //permintaan menggunakan item 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 mata uang tidak cukup"); } } 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) { // logika onjoin di sini } ontick(deltatime number) void { // logika tick di sini } onleave(client sandboxplayer, consented? boolean) { // tangani logika keluar di sini } } // antarmuka untuk pesan mata uang interface currencymessage { currencyid string, quantity number, } // antarmuka untuk pesan produk interface productmessage { productid string, productaction productaction, } // enum untuk mendefinisikan jenis tindakan produk export enum productaction { use, add, } deskripsi skrip server kelola mata uang dunia melalui zepeto multiplay currency https //developer zepeto me/docs/multiplay server/namespaces/zepeto multiplay currency/ gunakan currency credit() dan currency debit() untuk meningkatkan atau mengurangi saldo mata uang yang diinginkan setelah itu, panggil currency getbalances() untuk mendapatkan saldo saat ini untuk setiap mata uang currency credit(currencyid, quantity); currency debit(currencyid, quantity); currency getbalances(); kelola produk dunia melalui zepeto multiplay inventory https //developer zepeto me/docs/multiplay server/namespaces/zepeto multiplay inventory gunakan inventory add() dan inventory use() untuk meningkatkan atau mengurangi saldo mata uang yang diinginkan inventory add(productid, quantity); inventory use(productid, quantity); menangani permintaan dari klien untuk meningkatkan atau mengurangi mata uang dan produk gunakan loadbalance() untuk mendapatkan informasi mata uang yang terdaftar di zepeto studio jika ada beberapa mata uang, anda dapat mengkondisikan pada nilai id mata uang tertentu untuk mendapatkan saldo hanya mata uang tersebut kirim nilai saldo akhir kepada klien sebagai pesan ruangan