HazineAvı geliştirici modülü, oyunculara deneyiminizin tamamını organik bir şekilde tanıtarak keşfetmeleri için doğuştan gelen bir oyunlaştırma yolu sunar. Oyuncu ilerlemesi kalıcıdır, böylece hazine avları oturumlar arasında devam edebilir.
Modül kullanımı
Kurulum
HazineAvı modülünü bir deneyimde kullanmak için:
Stüdyo’nun Pencere menüsünden veya Ana Sayfa sekmesi araç çubuğundan Araç Kutusunu açın ve Yaratıcı Mağaza sekmesini seçin.

Modeller sıralamasının seçildiğinden emin olun, ardından Kategoriler için Hepsini Gör butonuna tıklayın.

Paketler simgesini bulun ve tıklayın.
Hazine Avı modülünü bulun ve tıklayın veya 3D görünümüne sürükleyip bırakın.

Gözatıcı penceresinde tüm HazineAvı modelini ReplicatedStorage içine taşıyın. Deneyimi çalıştırdığınızda modül çalışmaya başlayacaktır.
Kullanım jetonları
Hazine avı modülü, oyuncuların aradığı ve topladığı öğeler olarak jetonlar kullanır. Modül, 3D dünyada konumlandırabileceğiniz bir jeton modelini beraberinde getirir.
Modülün ana klasöründeki Workspace klasöründe Jeton1 ağ yapısını bulun.

Jeton1'i üst düzey Workspace hiyerarşisine taşımak ve istediğiniz yere konumlandırmak için taşıyın.
Jetona eşsiz bir isim verin; bu isim, modülün her oyuncunun hangi jetonları topladığını takip etmesini sağlar.
Daha fazla jeton eklemek için mevcut bir jetonu kopyalayın ve ona eşsiz bir isim verin.
Eğer paketlenen ağ yapısı jetonlarını kullanmak istemiyorsanız, aşağıdaki kriterleri karşılayan herhangi bir Model veya BasePart çalışır:
- Nesne, CollectionService etiketi olarak ScavengerHuntPart etiketine sahip olmalıdır. İstenirse, modülün kullandığı etiketi tokenTag değerini configureServer çağrısında farklı bir değerle ayarlayarak değiştirebilirsiniz.
- Nesne, jeton toplandığında gösterilecek "lezzet metni"ni ayarlamak için bir çocuk StringValue örneği içermelidir.


Kullanım bölgeleri
Zonlar, oyuncunun girdiğinde "toplandıkları" işaretlenen büyük alanlardır. Ayrıca, bir oyuncu bölgeden çıkarken, lezzet metni modali otomatik olarak kaldırılır ve bölge kendisi çalışma alanından kaldırılır.
Bölgenin etrafında sabitlenmiş bir parça oluşturun, örneğin bir blok veya küre. Modül, oyunu çalışırken, oyuncuların bölgeyle fiziksel olarak çarpışmasını engellemek için CanCollide özelliğini devre dışı bırakacaktır.
Ona eşsiz bir isim verin. Bu isim, modülün hangi bölgelerin her oyuncu tarafından girildiğini takip etmesini sağlar.
Parçanın özelliklerinin Etiketler bölümünden, CollectionService'ın bunu tespit etmesi için parçaya ScavengerHuntPart etiketini uygulayın. İstenirse, modülün kullandığı etiket adı tokenTag değerini configureServer çağrısında farklı bir değerle ayarlayarak değiştirilebilir.
Bölgeye girildiğinde gösterilecek "lezzet metni"ni ayarlamak için bir çocuk StringValue örneği ekleyin.

Yapılandırma
Modül, çoğu kullanım durumu için önceden yapılandırılmıştır, ancak kolayca özelleştirilebilir. Örneğin, jeton döndürme hızını değiştirmek ve modal bilgi mesajını özelleştirmek için:
StarterPlayerScripts içinde, yeni bir LocalScript oluşturun ve adını ConfigureScavengerHunt olarak değiştirin.
Aşağıdaki kodu yeni betiğe yapıştırın.
LocalScript - ConfigureScavengerHuntlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureClient({infoModalText = "Hazine Avıma Hoşgeldin!",completeModalText = "Hazine Avıma katıldığınız için teşekkürler!",tokenRotationSpeed = 60,})
Toplama olayları
Her seferinde bir oyuncu bir jeton topladığında veya bir bölgeye girdiğinde, toplandı olayı tetiklenir. Bu olayı, sunucu tarafında bir Script içinde dinleyebilir ve buna uygun şekilde yanıt verebilirsiniz. Bağlı fonksiyon, jetona çarpan veya bölgeye giren Player'ı ve o jetonun veya bölgenin adını alır.
Benzer şekilde, bir oyuncu tüm jetonları topladığında veya tüm etiketli bölgelere girdiğinde, tümüToplandı olayı tetiklenir ve bağlı fonksiyon, ilişkili Player'ı alır. Bu fonksiyon, her oyuncu için yalnızca bir kez tetiklenir ve bu oyuncuya bir rozet, yeni bir alana erişim, deneyim içi para vb. vermek için kullanılabilir.
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 .. " avı tamamladı!")
end)
Özel GUI
Bu modül, varsayılan GUI'sini özelleştirmek için birkaç seçenek sunar, ancak bunun yerine özel GUI öğelerini görüntülemeyi tercih edebilirsiniz.
useCustomModals configureClient işlevinde true olarak ayarlandığında, oyuncu jeton izleyiciyi etkinleştirdiğinde showInfoModal olayı tetiklenir. Benzer şekilde, oyuncu, hazine avındaki her şeyi topladığında showCompleteModal olayı tetiklenir. Bu olayların ikisi de bir LocalScript içinde dinlenebilir.
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
-- Özel bilgi modali göster
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Özel tam modal göster
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
GUI görünürlüğü
Varsayılan olarak, hazine avı, bilgi modalı veya tamamlama modalı görüntülendiğinde tüm ScreenGuis ve CoreGuis (oyuncu listesi hariç) saklar. Bu otomatik gizleme davranışını geçersiz kılmak ve hangi GUI'lerin görünür kalması gerektiğine programatik olarak karar vermek istiyorsanız, hideOtherGuis ve showOtherGuis geri çağırmalarını dahil edin ve kendi özel mantığınızla yanıt verin.
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 = {}
-- Gizlenmeyecek bir ekran GUI'si oluştur
local specialGuiInstance = Instance.new("ScreenGui")
-- Hazine avı GUI'sinin üstünde ekran GUI'si çizin
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- GUI'ye metin etiketi ekle
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "Modalları görüntülerken görünür kalır"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- Geliştirici tanımlı tüm ekran GUI'lerini gizle
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
-- Belirli çekirdek GUI'leri gizle
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Gizlenen tüm geliştirici tanımlı ekran GUI'lerini göster
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Gizlenen belirli çekirdek GUI'leri göster
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
API referansı
Fonksiyonlar
configureClient
configureClient(config: table)
Aşağıdaki anahtarlar/değerler aracılığıyla varsayılan istemci tarafı yapılandırma seçeneklerini geçersiz kılar. Bu işlev yalnızca bir LocalScript'ten çağrılabilir.
| Anahtar | Açıklama | Varsayılan |
|---|---|---|
| autoDismissTime | Modal otomatik olarak kendini kapatmadan veya mevcut modal sayfasından sonraki sayfaya geçmeden önce bekleyeceği süre (saniye cinsinden). Devre dışı bırakmak için 0 olarak ayarlayın. | 20 |
| closeModalGamepad | Modalları kapatmak için kullanılan gamepad butonu (Enum.KeyCode). | ButtonA |
| closeModalKeyboard | Modalları kapatmak için kullanılan klavye tuşu (Enum.KeyCode). | E |
| completeModalText | Hazine avı tamamlandığında jeton izleyiciye tıkladıktan sonra görünen modal üzerindeki metin. | "Katıldığınız için teşekkürler!" |
| infoModalText | Jeton izleyiciye tıkladığınızda görünen modal üzerindeki metin. | "Avı tamamlamak için tüm jetonları bul" |
| tokenRotationSpeed | Jetonların döndüğü hız, saniyede derece cinsinden. Dönmeyi önlemek için 0 olarak ayarlayın. | 20 |
| nextArrowImage | Mevcut modal sayfasından sonraki modal sayfalarının gösterileceğini belirtmek için kullanılan görüntü. | "rbxassetid://8167172095" |
| openTokenTrackerGamepad | Jeton izleyiciyi etkinleştirdikten sonra görünen modalları göstermek için kullanılan gamepad butonu (Enum.KeyCode). | ButtonY |
| openTokenTrackerKeyboard | Jeton izleyiciyi etkinleştirdikten sonra görünen modalları göstermek için kullanılan klavye tuşu (Enum.KeyCode). | Y |
| openTokenTrackerGamepadButtonImage | Jeton izleyiciyi etkinleştirmek için kullanılan gamepad butonunun görüntüsü. | "rbxassetid://8025860488" |
| regionIcon | Bölgelerde girildiği zaman jeton izleyicinin yanında gösterilecek simge. | "rbxassetid://8073794624" |
| tokenIcon | Jetonların toplandığı zaman jeton izleyicinin yanında gösterilecek simge. | "rbxassetid://8073794477" |
| tokenTrackerPositionSmallDevice | Küçük cihazlar gibi telefonlarda jeton izleyici UI'nin konumu (UDim2). | (1, 0, 0, 84) |
| tokenTrackerPositionLargeDevice | Büyük cihazlar gibi tabletlerde ve PC'de jeton izleyici UI'nin konumu (UDim2). | (1, 0, 1, -16) |
| useRegions | jetonlar yerine bölgeler kullanın. | false |
LocalScriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureClient({infoModalText = "Hazine Avıma Hoşgeldin!",completeModalText = "Hazine Avıma katıldığınız için teşekkürler!",tokenRotationSpeed = 60,navigationBeam = {lightEmission = 1},modal = {textSize = 14},})
configureServer
configureServer(config: table)
Varsayılan sunucu tarafı yapılandırma seçeneklerini aşagıdaki anahtarlar/değerler aracılığıyla geçersiz kılar. Bu işlev yalnızca bir Script'ten çağrılabilir.
| Anahtar | Açıklama | Varsayılan |
|---|---|---|
| tokenTag | CollectionService tarafından hazine avında kullanılan tüm jetonları veya bölgeleri bulmak için kullanılan etiket. | "ScavengerHuntPart" |
| datastoreName | Hazine avında her oyuncunun toplama ilerlemesini saklamak için kullanılan DataStore'un adı. | "ScavengerHuntTokens" |
| resetOnPlayerRemoving | Doğruysa, oyuncu deneyimden ayrıldığında kullanıcının ilerlemesini sıfırlar; hazine avını test ederken ilerlemeyi kaydetmemek için uygundur. | false |
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureServer({tokenTag = "GreenGem",})
disable
disable()
Hazine avı için tüm UI'yi gizler, tüm giriş olay dinleyicilerini devre dışı bırakır ve oyuncuların jeton toplamalarını veya bölgelerle etkileşimde bulunmalarını engeller. Bu işlev yalnızca bir Script'ten çağrılabilir.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.disable()
enable
enable()
Hazine avı için tüm UI'yi gösterir, tüm giriş olay dinleyicilerini bağlar ve oyuncuların jeton toplamalarına ve bölgelerle etkileşimde bulunmalarına izin verir. Bu işlev yalnızca bir Script'ten çağrılabilir.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.enable()
Olaylar
collected
Bir oyuncu bir jetona çarptığında veya bir bölgeye girdiğinde tetiklenir. Bağlı fonksiyon, jetona çarpan veya bölgeye giren Player'ı ve jetona çarptığı veya girdiği bölgenin adını alacaktır. Bu olay yalnızca bir Script içinde bağlanabilir.
| Parametreler | |
|---|---|
| player: Player | Bir jetona çarpan veya bir bölgeye giren kullanıcı. |
| itemName: string | Çarpılan jetonun veya girilen bölgenin adı. |
| totalCollected: number | Oyuncu olan player tarafından toplanan toplam jeton sayısı. |
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
Bir oyuncu tüm jetonları topladığında veya hazine avındaki tüm bölgeleri girdiğinde tetiklenir. Bağlı fonksiyon, tüm jetonları toplayan Player'ı alacaktır ve bu yalnızca oyuncu için bir kere tetiklenir. Bu olay yalnızca bir Script içinde bağlanabilir.
| Parametreler | |
|---|---|
| player: Player | Tüm jetonları toplayan veya tüm bölgeleri giren oyuncu. |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " avı tamamladı!")
end)
showInfoModal
useCustomModals yapılandırma seçeneği true olarak ayarlandığında oyuncu jeton izleyiciye tıkladığında tetiklenir. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
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
useCustomModals yapılandırma seçeneği true olarak ayarlandığında ve oyuncu hazine avındaki tüm jetonları topladığında jeton izleyiciye tıkladığında tetiklenir. Bu olay yalnızca bir LocalScript içinde bağlanabilir.
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)
Geri çağırmalar
hideOtherGuis
hideOtherGuis(callback: function)
Bu geri çağırma, bir modal gösterilmeden hemen önce çalışır ve modal gösterilmeden önce tüm ScreenGuis veya bunların içindeki öğeleri devre dışı bırakmanıza olanak tanır. GUI Görünürlüğü ile ilgili ayrıntılar ve örnek kod için bakın.
showOtherGuis
showOtherGuis(callback: function)
Bu geri çağırma, bir modal gösterildikten hemen sonra çalışır ve tüm ScreenGuis veya bunların içindeki öğeleri etkinleştirmenize olanak tanır. GUI Görünürlüğü ile ilgili ayrıntılar ve örnek kod için bakın.