Perburuan Harta Karun

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

Modul ScavengerHunt pengembang memberikan pemain cara yang secara inheren digamifikasi untuk menjelajahi permainan Anda, secara organik memperkenalkan mereka ke seluruh tempat. Kemajuan pemain bersifat persisten, sehingga perburuan harta karun dapat berlanjut di antara sesi.

Penggunaan modul

Instalasi

Untuk menggunakan modul ScavengerHunt dalam sebuah permainan:

  1. Dari menu Jendela Studio atau toolbar tab Beranda, buka Toolbox dan pilih tab Toko Pembuat.

  2. Pastikan pengurutan Model dipilih, lalu klik tombol Lihat Semua untuk Kategori.

  3. Temukan dan klik ubin Paket.

  4. Temukan modul Perburuan Harta Karun dan klik, atau seret dan jatuhkan ke dalam tampilan 3D.

  5. Di jendela Explorer, pindahkan seluruh model ScavengerHunt ke dalam ReplicatedStorage. Setelah menjalankan permainan, modul akan mulai berjalan.

Menggunakan token

Modul perburuan harta karun menggunakan token sebagai item yang dicari dan dikumpulkan oleh pemain. Modul ini dilengkapi dengan satu model token yang dapat Anda posisikan di dunia 3D.

  1. Temukan mesh Token1 di dalam folder Workspace dari folder utama modul.

  2. Pindahkan Token1 ke dalam hierarki Workspace tingkat atas dan posisikan di tempat yang diinginkan.

  3. Beri token nama unik; nama ini adalah cara modul melacak token mana yang telah dikumpulkan oleh setiap pemain.

  4. Untuk menambahkan lebih banyak token, duplikat token yang ada dan beri nama unik.

Jika Anda tidak ingin menggunakan token mesh yang disertakan, model Model atau BasePart apa pun akan berfungsi, asalkan memenuhi kriteria berikut:

  • Objek memiliki tag CollectionService bernama ScavengerHuntPart. Jika diinginkan, nama tag CollectionService yang digunakan modul dapat diubah dengan mengatur nilai yang berbeda untuk tokenTag dalam panggilan configureServer.

  • Objek berisi instance StringValue anak yang diatur ke "flavor text" untuk ditampilkan saat token dikumpulkan.

    Model
    MeshPart

Menggunakan wilayah

Wilayah sedikit berbeda dari token, sebagai area besar yang ditandai sebagai "dikumpulkan" setelah pemain memasuki mereka. Selain itu, ketika pemain meninggalkan wilayah, modal teks flavor secara otomatis ditutup dan wilayah itu sendiri dihapus dari workspace.

  1. Buat bagian yang terikat di sekitar wilayah, seperti blok atau bola. Modul ini secara otomatis akan menonaktifkan properti CanCollide saat runtime sehingga pemain tidak bertabrakan secara fisik dengan wilayah tersebut.

  2. Beri nama unik. Nama ini adalah cara modul melacak wilayah mana yang telah dimasuki oleh setiap pemain.

  3. Menggunakan bagian Tags dari properti bagian, terapkan tag ScavengerHuntPart pada bagian tersebut agar CollectionService dapat mendeteksinya. Jika diinginkan, nama tag yang digunakan modul dapat diubah dengan mengatur nilai yang berbeda untuk tokenTag dalam panggilan configureServer.

  4. Sertakan instance StringValue anak yang diatur ke "flavor text" untuk ditampilkan saat wilayah dimasuki.

Konfigurasi

Modul ini telah dikonfigurasi sebelumnya untuk bekerja pada sebagian besar kasus penggunaan, tetapi dapat dengan mudah disesuaikan. Misalnya, untuk mengubah kecepatan rotasi token dan menyesuaikan pesan informasi modal:

  1. Di StarterPlayerScripts, buat LocalScript baru dan ganti namanya menjadi ConfigureScavengerHunt.

  2. Tempelkan kode berikut ke dalam skrip baru.

    LocalScript - ConfigureScavengerHunt
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
    ScavengerHunt.configureClient({
    infoModalText = "Selamat datang di Perburuan Harta Karun saya!",
    completeModalText = "Terima kasih telah bermain Perburuan Harta Karun saya!",
    tokenRotationSpeed = 60,
    })

Peristiwa pengumpulan

Setiap kali pemain mengumpulkan token atau memasuki wilayah, peristiwa collected akan dipicu. Anda dapat mendengarkan peristiwa ini dari Script sisi server dan merespons sesuai kebutuhan. Fungsi yang terhubung menerima Player yang bertabrakan dengan token atau memasuki wilayah dan nama token atau wilayah tersebut.

Demikian pula, ketika pemain mengumpulkan semua token atau memasuki semua wilayah yang ditandai, peristiwa allCollected akan dipicu dan fungsi yang terhubung menerima Player yang terkait. Fungsi ini hanya dipicu sekali per pemain dan dapat digunakan untuk memberikan penghargaan kepada pemain tersebut dengan lencana, akses ke area baru, mata uang dalam permainan, dll.

Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName)
print(player.DisplayName, itemName)
end)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " menyelesaikan perburuan!")
end)

GUI Kustom

Modul ini menawarkan beberapa opsi untuk menyesuaikan GUI default-nya, tetapi Anda dapat memilih untuk menampilkan elemen GUI kustom sebagai gantinya.

Ketika useCustomModals diatur ke true dalam fungsi configureClient, peristiwa showInfoModal akan dipicu setiap kali pemain mengaktifkan pelacak token. Demikian pula, peristiwa showCompleteModal akan dipicu ketika pemain telah mengumpulkan semua yang ada dalam perburuan harta karun. Kedua peristiwa ini dapat didengarkan dalam LocalScript.

LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
-- Tampilkan modal informasi kustom
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Tampilkan modal lengkap kustom
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)

Visibilitas GUI

Secara default, perburuan harta karun menyembunyikan semua ScreenGuis dan CoreGuis (kecuali untuk daftar pemain) ketika modal informasi atau modal penyelesaian muncul. Jika Anda ingin menimpa perilaku penyembunyian otomatis ini dan secara programatis memutuskan GUI mana yang harus tetap terlihat, sertakan callback hideOtherGuis dan showOtherGuis dan respons dengan logika kustom Anda sendiri.

LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local hiddenInstances = {}
-- Buat GUI layar yang tidak akan disembunyikan
local specialGuiInstance = Instance.new("ScreenGui")
-- Gambar GUI layar di atas GUI perburuan harta karun
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Tambahkan label teks ke GUI
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "Tetap terlihat saat menampilkan modal"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- Sembunyikan semua GUI layar yang ditentukan pengembang
local instances = playerGui:GetChildren()
for _, instance in instances do
if instance:IsA("ScreenGui") and not instance.Name == "ScavengerHunt" and instance.Enabled then
instance.Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- Sembunyikan GUI inti tertentu
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Tampilkan semua GUI layar yang ditentukan pengembang yang disembunyikan
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Tampilkan GUI inti tertentu yang disembunyikan
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)

Referensi API

Fungsi

configureClient

configureClient(config: table)

Mengganti opsi konfigurasi sisi klien default melalui kunci/nilai berikut dalam tabel config. Fungsi ini hanya dapat dipanggil dari LocalScript.

KunciDeskripsiDefault
autoDismissTimeWaktu dalam detik sebelum modal secara otomatis menutup dirinya sendiri atau menavigasi ke halaman berikutnya jika ada. Atur ke 0 untuk menonaktifkan.20
closeModalGamepadTombol gamepad yang digunakan untuk menutup modal (Enum.KeyCode).ButtonA
closeModalKeyboardTombol keyboard yang digunakan untuk menutup modal (Enum.KeyCode).E
completeModalTextTeks yang ditampilkan pada modal yang muncul setelah mengklik pelacak token ketika perburuan harta karun selesai."Terima kasih telah berpartisipasi!"
infoModalTextTeks yang ditampilkan pada modal yang muncul setelah mengklik pelacak token."Temukan semua token untuk menyelesaikan perburuan"
tokenRotationSpeedKecepatan di mana token berputar, dalam derajat per detik. Atur ke 0 untuk mencegah rotasi.20
nextArrowImageGambar yang digunakan untuk menunjukkan bahwa ada lebih banyak halaman modal yang akan ditampilkan setelah halaman modal saat ini."rbxassetid://8167172095"
openTokenTrackerGamepadTombol gamepad yang digunakan untuk menampilkan modal yang muncul setelah mengaktifkan pelacak token (Enum.KeyCode).ButtonY
openTokenTrackerKeyboardTombol keyboard yang digunakan untuk menampilkan modal yang muncul setelah mengaktifkan pelacak token (Enum.KeyCode).Y
openTokenTrackerGamepadButtonImageGambar untuk tombol gamepad yang digunakan untuk mengaktifkan pelacak token."rbxassetid://8025860488"
regionIconIkon yang ditampilkan di samping pelacak token saat memasuki wilayah."rbxassetid://8073794624"
tokenIconIkon yang ditampilkan di samping pelacak token saat mengumpulkan token."rbxassetid://8073794477"
tokenTrackerPositionSmallDevicePosisi UI pelacak token di perangkat kecil seperti ponsel (UDim2).(1, 0, 0, 84)
tokenTrackerPositionLargeDevicePosisi UI pelacak token di perangkat yang lebih besar seperti tablet dan PC (UDim2).(1, 0, 1, -16)
useRegionsAlih-alih token, gunakan wilayah.false
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureClient({
infoModalText = "Selamat datang di Perburuan Harta Karun saya!",
completeModalText = "Terima kasih telah bermain Perburuan Harta Karun saya!",
tokenRotationSpeed = 60,
navigationBeam = {
lightEmission = 1
},
modal = {
textSize = 14
},
})

configureServer

configureServer(config: table)

Mengganti opsi konfigurasi sisi server default melalui kunci/nilai berikut dalam tabel config. Fungsi ini hanya dapat dipanggil dari Script.

KunciDeskripsiDefault
tokenTagTag yang digunakan oleh CollectionService untuk menemukan semua token atau wilayah yang digunakan dalam perburuan harta karun."ScavengerHuntPart"
datastoreNameNama dari DataStore yang digunakan oleh perburuan harta karun untuk menyimpan kemajuan koleksi setiap pemain."ScavengerHuntTokens"
resetOnPlayerRemovingJika true, mengatur ulang kemajuan pengguna saat mereka meninggalkan permainan; nyaman untuk tidak menyimpan kemajuan saat menguji perburuan harta karun.false
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureServer({
tokenTag = "GreenGem",
})

disable

disable()

Menyembunyikan semua UI untuk perburuan harta karun, memutuskan semua pendengar acara input, dan mencegah pemain mengumpulkan token atau berinteraksi dengan wilayah. Fungsi ini hanya dapat dipanggil dari Script.

Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.disable()

enable

enable()

Menampilkan semua UI untuk perburuan harta karun, menghubungkan semua pendengar acara input, dan memungkinkan pemain mengumpulkan token dan berinteraksi dengan wilayah. Fungsi ini hanya dapat dipanggil dari Script.

Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.enable()

Peristiwa

collected

Dipicu ketika pemain bertabrakan dengan token atau memasuki wilayah. Fungsi yang terhubung akan menerima Player yang bertabrakan dengan token atau memasuki wilayah dan nama token yang bertabrakan atau wilayah yang dimasuki. Peristiwa ini hanya dapat dihubungkan dalam Script.

Parameter
player: PlayerPengguna yang bertabrakan dengan token atau memasuki wilayah.
itemName: string Nama token yang bertabrakan atau wilayah yang dimasuki.
totalCollected: numberTotal jumlah token yang dikumpulkan oleh pengguna yang diwakili oleh player.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)

allCollected

Dipicu ketika pemain mengumpulkan semua token atau memasuki semua wilayah dalam perburuan harta karun. Fungsi yang terhubung akan menerima Player yang mengumpulkan semua token, dan hanya dipicu sekali per pemain. Peristiwa ini hanya dapat dihubungkan dalam Script.

Parameter
player: PlayerPemain yang mengumpulkan semua token atau memasuki semua wilayah.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " menyelesaikan perburuan!")
end)

showInfoModal

Dipicu ketika pemain mengklik pelacak token ketika opsi konfigurasi useCustomModals diatur ke true. Peristiwa ini hanya dapat dihubungkan dalam LocalScript.

LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
local infoModal = Players.LocalPlayer.PlayerGui.InfoModal
infoModal.Enabled = true
end)

showCompleteModal

Dipicu ketika pemain mengklik pelacak token ketika opsi konfigurasi useCustomModals diatur ke true dan pemain telah mengumpulkan semua token dalam perburuan harta karun. Peristiwa ini hanya dapat dihubungkan dalam LocalScript.

LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showCompleteModal:Connect(function()
local completeModal = Players.LocalPlayer.PlayerGui.CompleteModal
completeModal.Enabled = true
end)

Callback

hideOtherGuis

hideOtherGuis(callback: function)

Callback ini dijalankan segera sebelum modal ditampilkan, memungkinkan Anda untuk menonaktifkan seluruh ScreenGuis atau elemen di dalamnya sebelum modal ditampilkan. Lihat Visibilitas GUI untuk detail dan contoh kode.

showOtherGuis

showOtherGuis(callback: function)

Callback ini dijalankan segera setelah modal ditutup, memungkinkan Anda untuk mengaktifkan seluruh ScreenGuis atau elemen di dalamnya. Lihat Visibilitas GUI untuk detail dan contoh kode.

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