Hazine Avı

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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:

  1. 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.

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

  3. Paketler simgesini bulun ve tıklayın.

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

  5. 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.

  1. Modülün ana klasöründeki Workspace klasöründe Jeton1 ağ yapısını bulun.

  2. Jeton1'i üst düzey Workspace hiyerarşisine taşımak ve istediğiniz yere konumlandırmak için taşıyın.

  3. Jetona eşsiz bir isim verin; bu isim, modülün her oyuncunun hangi jetonları topladığını takip etmesini sağlar.

  4. 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.
Model
Ağ Yapısı

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.

  1. 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.

  2. Ona eşsiz bir isim verin. Bu isim, modülün hangi bölgelerin her oyuncu tarafından girildiğini takip etmesini sağlar.

  3. 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.

  4. 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:

  1. StarterPlayerScripts içinde, yeni bir LocalScript oluşturun ve adını ConfigureScavengerHunt olarak değiştirin.

  2. Aşağıdaki kodu yeni betiğe yapıştırın.

    LocalScript - ConfigureScavengerHunt

    local 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.

AnahtarAçıklamaVarsayılan
autoDismissTimeModal 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
closeModalGamepadModalları kapatmak için kullanılan gamepad butonu (Enum.KeyCode).ButtonA
closeModalKeyboardModalları kapatmak için kullanılan klavye tuşu (Enum.KeyCode).E
completeModalTextHazine avı tamamlandığında jeton izleyiciye tıkladıktan sonra görünen modal üzerindeki metin."Katıldığınız için teşekkürler!"
infoModalTextJeton izleyiciye tıkladığınızda görünen modal üzerindeki metin."Avı tamamlamak için tüm jetonları bul"
tokenRotationSpeedJetonların döndüğü hız, saniyede derece cinsinden. Dönmeyi önlemek için 0 olarak ayarlayın.20
nextArrowImageMevcut modal sayfasından sonraki modal sayfalarının gösterileceğini belirtmek için kullanılan görüntü."rbxassetid://8167172095"
openTokenTrackerGamepadJeton izleyiciyi etkinleştirdikten sonra görünen modalları göstermek için kullanılan gamepad butonu (Enum.KeyCode).ButtonY
openTokenTrackerKeyboardJeton izleyiciyi etkinleştirdikten sonra görünen modalları göstermek için kullanılan klavye tuşu (Enum.KeyCode).Y
openTokenTrackerGamepadButtonImageJeton izleyiciyi etkinleştirmek için kullanılan gamepad butonunun görüntüsü."rbxassetid://8025860488"
regionIconBölgelerde girildiği zaman jeton izleyicinin yanında gösterilecek simge."rbxassetid://8073794624"
tokenIconJetonların toplandığı zaman jeton izleyicinin yanında gösterilecek simge."rbxassetid://8073794477"
tokenTrackerPositionSmallDeviceKüçük cihazlar gibi telefonlarda jeton izleyici UI'nin konumu (UDim2).(1, 0, 0, 84)
tokenTrackerPositionLargeDeviceBüyük cihazlar gibi tabletlerde ve PC'de jeton izleyici UI'nin konumu (UDim2).(1, 0, 1, -16)
useRegionsjetonlar yerine bölgeler kullanın.false
LocalScript

local 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.

AnahtarAçıklamaVarsayılan
tokenTagCollectionService tarafından hazine avında kullanılan tüm jetonları veya bölgeleri bulmak için kullanılan etiket."ScavengerHuntPart"
datastoreNameHazine avında her oyuncunun toplama ilerlemesini saklamak için kullanılan DataStore'un adı."ScavengerHuntTokens"
resetOnPlayerRemovingDoğ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
Script

local 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.

Script

local 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.

Script

local 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: PlayerBir jetona çarpan veya bir bölgeye giren kullanıcı.
itemName: string Çarpılan jetonun veya girilen bölgenin adı.
totalCollected: numberOyuncu 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: PlayerTü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.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.