Paket Misi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Paket fitur Misi menawarkan fungsionalitas siap pakai untuk membuat misi yang dapat diselesaikan pemain untuk mendapatkan hadiah dan kemajuan dalam permainan Anda. Semua misi harus memiliki ID, kategori, dan daftar tugas yang harus diselesaikan pemain untuk menyelesaikan misi. Namun, daftar tugas dapat kosong, memungkinkan hadiah misi untuk diklaim segera.

Dengan opsi kustomisasi paket, Anda dapat mempersonalisasi semua misi untuk memenuhi kebutuhan gameplay unik Anda, seperti:

  • Membuat misi yang memperkenalkan pemain baru ke dalam permainan Anda dan meningkatkan retensi D1.
  • Menargetkan retensi D7 dan D30 dengan menambahkan tujuan jangka menengah hingga panjang dan rasa kemajuan.
  • Meningkatkan keterlibatan dengan menampilkan berbagai sistem dalam permainan Anda dan memberikan hadiah kepada pemain untuk berinteraksi dengan mereka.

Dapatkan paket

Toko Pembuat adalah tab dari Toolbox yang dapat Anda gunakan untuk menemukan semua aset yang dibuat oleh Roblox dan komunitas Roblox untuk digunakan dalam proyek Anda, termasuk model, gambar, mesh, audio, plugin, video, dan aset font. Anda dapat menggunakan Toko Pembuat untuk menambahkan satu atau lebih aset langsung ke dalam permainan yang terbuka, termasuk paket fitur!

Setiap paket fitur memerlukan paket fitur Core untuk berfungsi dengan baik. Setelah aset paket fitur Core dan Misi ada dalam inventaris Anda, Anda dapat menggunakannya kembali di proyek mana pun di platform.

Untuk mendapatkan paket dari inventaris Anda ke dalam permainan Anda:

  1. Tambahkan Core dan Misi ke inventaris Anda dalam Studio dengan mengklik tautan Tambahkan ke Inventaris dalam set komponen berikut.

  2. Dari menu Jendela Studio atau toolbar tab Beranda, buka Toolbox.

  3. Di jendela Toolbox, klik tab Inventaris. Penyortiran Model Saya ditampilkan.

    Jendela Toolbox Studio dengan tab Inventaris yang disorot.
  4. Klik ubin Paket Fitur Core, lalu ubin Paket Fitur Misi. Kedua folder paket ditampilkan di jendela Explorer.

  5. Seret folder paket ke dalam ReplicatedStorage.

Definisikan misi

Setiap misi yang dapat diselesaikan mencakup serangkaian tugas yang harus diselesaikan untuk menyelesaikan misi, opsi konfigurasi, dan metadata tampilan opsional, semuanya dapat didefinisikan dalam ReplicatedStorage.Missions.Configs.Missions, dengan tipe yang diekspor dari skrip Types di folder yang sama.

Bidang yang Diperlukan

Bidang berikut diperlukan untuk setiap misi.

NamaTipeDeskripsi
missionIdstringKunci tabel Misi utama. Semua misi diidentifikasi dengan string unik mereka sendiri.
categoryIdstringMisi harus termasuk dalam kategori, dan dikelompokkan berdasarkan kategori di UI.
taskstableDaftar tugas yang harus diselesaikan pemain untuk menyelesaikan misi.

Kondisi Pembukaan

Secara default, misi dibuka untuk pemain secara otomatis dan dapat diselesaikan tepat sekali. Namun, Anda dapat menggunakan opsi konfigurasi opsional berikut untuk mengubah perilaku ini.

NamaTipeDeskripsi
prerequisitestableDaftar missionIds lain yang harus diselesaikan sebelum misi dapat dibuka.
manualOnlyboolMenonaktifkan pembukaan otomatis misi. Sebagai gantinya, fungsi harus dipanggil untuk membuka misi. Setiap kondisi pembukaan lainnya juga harus dipenuhi.
availableAfterUtcboolMisi tidak dapat dibuka sebelum waktu yang ditentukan dalam UTC.
availableBeforeUtcboolMisi tidak dapat dibuka setelah waktu yang ditentukan dalam UTC. Jika dibuka tetapi tidak diselesaikan sebelum waktu ini, misi akan gagal.
repeatableboolMisi akan dibuka kembali setelah diselesaikan.
repeatLimitnumberJika misi dapat diulang, tidak dapat diulang lebih dari jumlah ini.
repeatCooldownSecondsnumberJika misi dapat diulang, ada penundaan sebelum misi dibuka kembali.
expireSecondsnumberJika misi dibuka dan tidak diselesaikan dalam jumlah detik yang ditentukan, maka misi akan gagal.
expireCountOfflineboolJika misi memiliki expireSeconds dan expireCountOffline disetel ke true, waktu saat pemain tidak berada di dalam permainan akan dihitung menuju kedaluwarsa misi.

Metadata

Misi memiliki metadata yang menentukan bagaimana mereka akan ditampilkan di antarmuka pengguna Misi. Anda dapat menggunakan bidang opsional berikut untuk menyesuaikan metadata-nya.

NamaTipeDeskripsi
displayNamestringNama yang ditampilkan untuk misi di antarmuka pengguna alih-alih missionId.
descriptionstringBlok teks yang lebih panjang yang memberikan informasi atau konteks tambahan tentang misi.
visibleAfterCompleteboolJika disetel ke true, misi akan muncul dalam daftar misi bahkan setelah diselesaikan tetapi ditandai sebagai selesai.
visibleAfterFailedboolJika disetel ke true, misi akan muncul dalam daftar misi bahkan setelah gagal tetapi ditandai sebagai gagal.
visibleBeforeUnlockedboolJika disetel ke true, misi akan terlihat tetapi terkunci dalam daftar misi sebelum tersedia untuk diselesaikan.
invisibleWhileActiveboolJika disetel ke true, misi akan tidak terlihat bahkan saat sedang dalam proses aktif.
rewardstableDaftar informasi tampilan hadiah.
  • assetID (number) - ID gambar yang ditampilkan di UI misi di bawah hadiah untuk quest. Ini diperlukan jika hadiah ada.
  • displayName (string) - Nama yang ditampilkan di UI misi di bawah ikon.

Definisikan tugas

Setiap misi dapat memiliki nol atau lebih tugas. Jika sebuah misi memiliki nol tugas, misi dapat diklaim segera setelah dibuka; jika sebuah misi memiliki satu atau lebih tugas, setelah tugas selesai, pemain dapat mengumpulkan hadiah yang terkait dengan misi tersebut. Setiap tugas memiliki taskId, yang merupakan kunci yang terkait dengan tugas untuk misi tertentu.

Tugas datang dalam dua tipe:

  • Tugas Berbasis Waktu - Memungkinkan Anda untuk memulai dan menghentikan tugas pada titik waktu yang berbeda. Sejumlah waktu tertentu harus berlalu saat timer tugas berjalan, kemudian tugas selesai.
  • Tugas Hitung - Memungkinkan Anda untuk menambah atau mengatur kemajuan tugas. Ketika kemajuan mencapai nilai yang ditetapkan, tugas selesai.

Kedua tipe tugas berbagi bidang berikut:

NamaTipeDeskripsi
taskTypestringMenentukan apakah tipe tugas adalah hitung atau berbasis waktu.
counterobject(Opsional) Penghitung yang dilacak tugas ini. Penghitung adalah penyimpanan persisten spesifik pemain untuk sebuah angka atau timer. Beberapa tugas dapat melacak satu penghitung; misalnya, jika lebih dari satu tugas melacak berapa banyak koin yang telah dikumpulkan pemain, maka semuanya dapat berbagi penghitung "koin" yang sama. Tugas-tugas ini dapat secara independen melacak koin baru yang dikumpulkan, mulai dari nol, atau melanjutkan menghitung dari nilai penghitung (semua koin yang sudah dikumpulkan).
  • counterId (string) - ID penghitung yang akan dilacak. Gunakan ID ini untuk mendapatkan atau mengatur nilai penghitung.
  • continueFromCounter (Opsional bool) - Jika disetel ke true, kemajuan tugas akan langsung cocok dengan nilai penghitung daripada jumlah yang telah meningkat.
metadataobject(Opsional) Informasi tentang bagaimana tugas ditampilkan di UI.
  • displayName (string) - Nama tugas, digunakan saat ditampilkan di UI.
  • numericType (Opsional string) - bagaimana angka kemajuan dalam tugas harus ditampilkan.
    • Fraksi, mis. 5/10 atau 5k/50k
    • Persentase, mis. 50% atau 10%
    • LongFraction, mis. 5/10 atau 5000/50000
    • Boolean, mis. Belum selesai
callToActionobject(Opsional) Sebuah tombol yang memicu fungsi callback.
  • callback (function) - Fungsi yang dipicu oleh tombol callToAction.
  • buttonText (string) - Teks yang ditampilkan di UI tombol.

Bidang Tugas Hitung

Tugas hitung memiliki nilai yang diperlukan. Ketika kemajuan tugas memenuhi jumlah ini, tugas selesai.

NamaTipeDeskripsi
goalCountnumber(Opsional) Kemajuan yang diperlukan untuk menyelesaikan tugas.

Bidang Tugas Waktu

Tugas waktu memiliki jumlah waktu target yang dihabiskan, dan dimulai dan dihentikan. Ketika jumlah waktu target tercapai, tugas selesai.

NamaTipeDeskripsi
goalSecondsnumberJumlah detik yang harus berlalu untuk menyelesaikan tugas.
startImmediatelyboolJika tugas harus mulai menghitung waktu segera setelah dibuka, bukan hanya setelah dimulai.
includesOfflineTimeboolJika tugas harus menyertakan waktu yang dihabiskan saat pemain tidak aktif dalam permainan.

Konfigurasi kategori

Kategori tidak perlu didefinisikan secara eksplisit untuk digunakan, karena kategori untuk sebuah misi memiliki nilai default yang akan digunakan. Namun, Anda dapat mengonfigurasi nilai-nilai ini di ReplicatedStorage.Missions.Configs.Categories untuk menambahkan efek tambahan pada kategori. Kategori diidentifikasi dengan CategoryIds unik, yang sama dengan yang dirujuk dalam konfigurasi misi.

NamaTipeDeskripsi
repeatDelaySecondsnumber(Opsional) Jika disetel, semua misi dalam kategori direset setiap kali jumlah waktu yang ditentukan berlalu, dan dapat dibuka, diselesaikan, dan hadiahnya diklaim lagi. Ini terpisah dari misi yang dapat diulang, yang dapat diulang dalam kategori tertentu.

Integrasikan logika server

Lihat ReplicatedStorage.Missions.Server.Examples.MissionsExample, yang menunjukkan bagaimana server Anda akan berinteraksi dengan paket fitur Misi.

Anda terutama perlu menghubungkan empat hal setelah menyeret paket fitur Misi ke dalam permainan Anda:

  1. Definisikan misi dalam konfigurasi misi Anda.

  2. Tambahkan logika ke permainan Anda untuk memperbarui kemajuan tugas atau penghitung yang terkait dengan kemajuan tersebut.

    README
    -- Meningkatkan kemajuan pada misi Melompat dengan tugas Jumps
    Missions.addProgressToTask(player, "Melompat", "Jumps", 1)
    -- Memulai timer pada misi WaktuBertarung dengan tugas WaktuDalamPertarungan
    Missions.startTimedTask(player, "WaktuBertarung", "WaktuDalamPertarungan")
    -- Menghentikan timer pada misi WaktuBertarung dengan tugas WaktuDalamPertarungan
    Missions.stopTimedTask(player, "WaktuBertarung", "WaktuDalamPertarungan")
    -- Meningkatkan kemajuan pada semua tugas yang terkait dengan penghitung Jumps
    CounterSystem.addCounter(player, "Jumps", 1)
    -- Memulai timer pada semua tugas berbasis waktu yang terkait dengan penghitung WaktuDalamPertarungan
    CounterSystem.startTimer(player, "WaktuDalamPertarungan")
    -- Menghentikan timer pada semua tugas berbasis waktu yang terkait dengan penghitung WaktuDalamPertarungan
    CounterSystem.stopTimer(player, "WaktuDalamPertarungan")
  3. Atur penangan penyelesaian misi, dan opsional penangan pembukaan atau kegagalan. Gunakan penangan penyelesaian untuk memberikan hadiah dari misi dalam permainan Anda.

    README
    local function completeHandler(player: Player, missionId: Types.MissionId)
    print(`{player} menyelesaikan misi {missionId}`)
    -- Berikan hadiah kepada pemain.
    end
    Missions.setCompletionHandler(missionId, completeHandler)
  4. Buka misi yang tidak dibuka secara otomatis. Logika paket fitur Misi memastikan bahwa semua persyaratan misi terpenuhi sebelum misi selesai, dan hadiahnya dapat dikumpulkan.

    README
    Missions.unlockMission(player, "Manual")

Konfigurasi konstanta

Konstanta untuk paket fitur Core berada di dua tempat:

  • Konstanta bersama berada di ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants.

  • Konstanta spesifik paket, dalam hal ini paket fitur Misi, berada di ReplicatedStorage.Missions.Configs.Constants.

Selain itu, Anda dapat menemukan string untuk terjemahan yang dibagi menjadi satu lokasi: ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings.

Kustomisasi komponen UI

Dengan memodifikasi objek paket, seperti warna, font, dan transparansi, Anda dapat menyesuaikan presentasi visual dari UI misi Anda. Misalnya, di ReplicatedStorage.Missions.Configs.Constants, Anda dapat mengaktifkan SingleTaskMode untuk menampilkan bilah kemajuan untuk tugas langsung di misi itu sendiri untuk misi yang hanya memiliki satu tugas.

Selain itu, jika permainan Anda sudah memiliki UI yang ada yang ingin Anda integrasikan dengan paket fitur Misi, klien ModuleScript MissionsClient berisi semua fungsi yang diperlukan untuk mendapatkan informasi tentang misi pemain yang dikirim dari server.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.